1
0

feat: 完善AES加密实现和多个问题的解决方案

- 在common库中添加了完整的AES-128加密解密实现
- 实现了AES-ECB和AES-CBC模式的加密解密函数
- 添加了密钥扩展和所有必要的AES操作函数
- 完成了问题10的AES-CBC模式实现
- 修复了问题11的加密oracle实现,使用正确的ECB检测
- 改进了代码风格,使用现代Rust格式化语法
- 为多个问题添加了common库的依赖

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-14 23:49:21 +08:00
parent 66ce722dd2
commit 6f54d41c8e
11 changed files with 653 additions and 14 deletions

View File

@@ -4,4 +4,5 @@ version = "0.1.0"
edition = "2024"
[dependencies]
common = { path = "../../common" }
rand = "0.9.1"

View File

@@ -1,4 +1,5 @@
use rand::{Rng, seq::IndexedRandom};
use common::{aes_cbc_enc, aes_ecb_enc, is_ecb, pkcs7_padding};
use rand::prelude::*;
fn gen_random_key() -> [u8; 16] {
let mut rng = rand::rng();
@@ -24,22 +25,23 @@ fn encryption_oracle(plaintext: &[u8]) -> Vec<u8> {
data.extend(plaintext);
data.extend(random_suffix);
pkcs7_padding(&mut data, 16); // in p9
pkcs7_padding(&mut data, 16);
if enc_mode == 0 {
// ECB mode in p7
ecb_encrypt(&data, &key)
println!("Using ECB mode.");
aes_ecb_enc(&data, &key).unwrap()
} else {
// CBC mode in p10
let iv = [0u8; 16];
cbc_encrypt(&data, &key, &iv)
println!("Using CBC mode.");
aes_cbc_enc(&data, &key, &iv).unwrap()
}
data
}
fn main() {
let plaintext = b"YELLOW SUBMARINE";
let encrypted_data = encryption_oracle(plaintext);
let plaintext = b"YELLOW SUBMARINE".repeat(32);
let encrypted_data = encryption_oracle(&plaintext);
// in p8
if is_ecb(&encrypted_data) {
println!("ECB mode detected.");