【发布时间】:2012-08-31 19:32:39
【问题描述】:
from Crypto.Cipher import AES
import os
key = 'mysecretpassword'
iv = os.urandom(16)
plaintext1 = 'Secret Message A'
encobj = AES.new(key, AES.MODE_CBC, iv)
ciphertext1 = encobj.encrypt(plaintext1)
encryptedText = ciphertext1.encode('base64')
print encryptedText
decobj = AES.new(key, AES.MODE_CBC, iv)
print decobj.decrypt(ciphertext1)
我从我的代码中复制了encryptedText 和key 的打印值并粘贴到以下网站。
http://www.everpassword.com/aes-encryptor
http://www.nakov.com/blog/2011/12/26/online-aes-encryptor-decryptor-javascript/
我希望它能够解密我的密码,但事实并非如此。因此我必须使用 pycrypto 错误。我该如何解决?这两个站点都可以相互加密和解密,但我的站点不能。这两个网站都确实使用了 CBC 模式。
【问题讨论】:
-
你尝试过不同的模式吗?我看不出该网站是使用 XTS、CBC 还是仅使用 ECB。尝试不同的模式。请注意,您使用静脉注射,但该网站不要求静脉注射。
-
你需要给解密器IV。该网站不接受静脉注射。所以它可能使用的是 ECB,而不是 CBC。
-
还有,你怎么知道网站把密文作为base64?
-
是的,我错误地假设该网站将密文作为base64。
-
其实我的假设是正确的,网站确实将密文作为base64。它甚至在第二个网络链接中明确说明。它不可能在 ascii 或其他东西中。所以我仍然对我在代码中做错了什么感到困惑。我如何让它被网站解密。