【问题标题】:AES encrypt in Cryptojs, decrypt in PycryptoAES 在 Cryptojs 中加密,在 Pycrypto 中解密
【发布时间】:2019-12-26 12:49:19
【问题描述】:

我在将密钥转换为 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'))

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

【问题讨论】:

  • 哈希算法md5 和sha256 的设计方式是它们不能用于返回平面文本。它们无法解密。
  • 那么我如何将我的密钥转换为16位或者说aes js版本使用什么哈希?
  • 你想达到什么目的?解密“lazydog”文本还是“黎明攻击”? AES 不能只使用密码,您提供的链接没有提供有关如何将密码转换为 AES 密钥的信息
  • "lazydog" 是密钥/密码/密码。我想从结果中解密“黎明攻击”。关于信息,您可以查看此链接。 jsfiddle.net/korvacs/4obfkxm7/17
  • 可以用,不过是模拟openssl EVP_BytesToKey函数,比较复杂,最近改了。如果我同时更改 js 和 python 代码并使它们工作,这对你有好处吗?

标签: python encryption cryptography aes pycrypto


【解决方案1】:

我正在使用 PBKDF2 生成 IV 和密钥。这是一个很好的做法。我们不需要转移 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")

【讨论】:

  • 老兄,谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
相关资源
最近更新 更多