【发布时间】:2020-01-10 08:57:48
【问题描述】:
我正在尝试在 CryptoJS 上解密并在 PyCrypto 中加密。
我看到this 的出色答案就像魅力一样,唯一的问题是它调整 PyCrypto 以与 CryptoJS 一起使用,我更喜欢定义我期望输入的规则,并尽可能少地使用 PyCrypto 进行调整默认值。
我想要求发送 iv,并使用零填充。
我在JS(ES6)中写了以下内容:
const iv = CryptoJS.enc.Hex.parse("1234567889012345");
const key = 'aR1h7EefwlPNVkvTHwfs6w=='
const encrypted = AES.encrypt(
password,
key,
{
iv,
padding: CryptoJS.pad.NoPadding
}
);
const payload = {password: encrypted, iv: iv};
// make HTTPS POST call
Python:
def decrypt_from_cryptoJS(encrypted, iv):
key = "aR1h7EefwlPNVkvTHwfs6w==".encode()
aes = AES.new(key.encode(), AES.MODE_CBC, iv)
encrypted = aes.decrypt(base64.b64decode(encrypted)))
但是,我得到 ValueError: raise TypeError("Object type %s cannot be passed to C code" % type(data))
如果我尝试通过以下方式创建 VI:
CryptoJS.lib.WordArray.random(16) 并通过 JS 的 toString() 方法发送,我得到:
Incorrect IV length (it must be 16 bytes long)
用于启动 AES
如何通过 PyCrypto 中的最小代码调整在 CryptoJS 中解密? 我什至不确定我是否走对了路..
【问题讨论】:
标签: javascript python aes cryptojs pycrypto