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:
@@ -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.");
|
||||
|
||||
Reference in New Issue
Block a user