以这个在线工具为例: https://tool.oschina.net/encrypt
选择 AES ,明文输入 test content ,得到密文 U2FsdGVkX18rKzwlZ/7CleXiil1NCTu46Q9LkW7eh3s=
JS 中可以正常解密:
CryptoJS.AES.decrypt("U2FsdGVkX18rKzwlZ/7CleXiil1NCTu46Q9LkW7eh3s=", "12345").toString(CryptoJS.enc.Utf8)
'test content'
如下 py 实现可以做到互相加密解密,但是无法解密通过上面在线工具中获得的密文。
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
key = '12345'
def encrypt(raw):
raw = pad(raw.encode(), 16)
cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
return base64.b64encode(cipher.encrypt(raw))
def decrypt(enc):
enc = base64.b64decode(enc)
cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
return unpad(cipher.decrypt(enc), 16)
上面在线工具没有让填写偏移量的地方,我就当作 ECB 模式,填充用 Pkcs7 来理解了,是我理解错了吗?
希望可以用 py 实现可以解密上面在线工具生成的密文。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.