gpt4 book ai didi

python - 在 Cryptojs 中进行 AES 加密,在 Pycrypto 中进行解密

转载 作者:行者123 更新时间:2023-12-01 00:13:07 25 4
gpt4 key购买 nike

在将 key 转换为 16 位时,我尝试过 md5 和 sha256,但加密后,如果我要通过第三方解密器验证它,结果将不起作用 https://www.browserling.com/tools/aes-decrypt

我的目标是使用python解密js版本。

添加了 js 版本的另一个链接。 https://jsfiddle.net/korvacs/4obfkxm7/17/

Python 代码:

from Crypto.Cipher import AES
from Crypto import Random
import hashlib
from base64 import b64encode

key = "lazydog".encode("utf-8")
key = hashlib.sha256(key).digest()

iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CBC, iv)
msg = iv + cipher.encrypt('Attack at dawn')

print(b64encode(msg).decode('utf-8'))

有人可以帮助我吗?我不太擅长加密。

最佳答案

我正在使用 PBKDF2 生成 IV 和 key 。这是一个很好的做法。我们不需要转移 IV:

Javascript:

let password = "lazydog";
let salt = "salt";
let iterations = 128;
let bytes = CryptoJS.PBKDF2(password, salt, { keySize: 48, iterations: iterations });
let iv = CryptoJS.enc.Hex.parse(bytes.toString().slice(0, 32));
let key = CryptoJS.enc.Hex.parse(bytes.toString().slice(32, 96));

let ciphertext = CryptoJS.AES.encrypt("Attack at dawn", key, { iv: iv });
console.log(ciphertext.toString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>

Python:

from base64 import b64decode
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2

data = b64decode("ibirgCQu8TwtJOaKKtMLxw==")

bytes = PBKDF2("lazydog".encode("utf-8"), "salt".encode("utf-8"), 48, 128)
iv = bytes[0:16]
key = bytes[16:48]
cipher = AES.new(key, AES.MODE_CBC, iv)
text = cipher.decrypt(data)
text = text[:-text[-1]].decode("utf-8")

关于python - 在 Cryptojs 中进行 AES 加密,在 Pycrypto 中进行解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59488728/

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