gpt4 book ai didi

python - 使用 ECB 模式加密解密字节时出现问题

转载 作者:行者123 更新时间:2023-11-29 08:13:44 27 4
gpt4 key购买 nike

我在使用 openssl crate 解密字节字符串时遇到问题。请注意,这是针对 Cryptopals 挑战,特别是第 2 组问题 2。文本文件已使用 AES 和 CBC 模式加密,但我猜单个 block 可以用 ECB 解密。

我已经尝试用 CBC 模式解密整个 10.txt 文件,我知道这行得通。我还使用了以下 Python 代码来验证相同字节的 ECB 解密是否也有效。

对于 Python 3:

from base64 import b64decode
from Crypto.Cipher import AES
def main():
key = b'YELLOW SUBMARINE'
with open("10.txt") as input_file:
data = b64decode(input_file.read())

data = data[0:AES.block_size]
print(data)
cipher = AES.new(key, AES.MODE_ECB)
x = cipher.decrypt(data)
print(x)
return

对于 Rust:

extern crate openssl;

use openssl::symm::decrypt;
use openssl::symm::{encrypt, Cipher};

static KEY: &'static [u8] = b"YELLOW SUBMARINE";

fn main() -> std::io::Result<()> {
// No idea why this OpenSSL call doesn't work.
let data = b"\x09\x12\x30\xaa\xde\x3e\xb3\x30\xdb\xaa\x43\x58\xf8\x8d\x2a\x6c";
let cipher = Cipher::aes_128_ecb();
let new_data = decrypt(cipher, KEY, None, data);
println!("error {:?}", new_data);

Ok(())
}

我希望看到这个函数在 Rust 中以与在 Python 中完成的方式相同的方式解密字节字符串。

最佳答案

OpenSSL 告诉您您的输入未正确填充。将输入更改为

let data = b"\x09\x12\x30\xaa\xde\x3e\xb3\x30\xdb\xaa\x43\x58\xf8\x8d\x2a\x6c\x60\xfa\x36\x70\x7e\x45\xf4\x99\xdb\xa0\xf2\x5b\x92\x23\x01\xa5";

你会看到你的代码正确地解密了它。

如果需要禁用填充,可以使用 Crypter 来实现对象并在其上调用 .pad(false) ( example )。

关于python - 使用 ECB 模式加密解密字节时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54046577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com