使用CryptoJS的简单加密/解密给了我一个奇怪的输出。有人能告诉我密码哪里出错了吗?(我在控制台中寻找输出)
var code = "Testcode";
var diterations = 1000;
var defaultkeyBytes = new CryptoJS.PBKDF2(code, code, { hasher: CryptoJS.algo.SHA512, keySize: 48 / 4, iterations: diterations });
var key = new CryptoJS.lib.WordArray.init(defaultkeyBytes.words, 32);
var iv = new CryptoJS.lib.WordArray.init(defaultkeyBytes.words.splice(32 / 4), 16);
var data = "test message new test message";
var h = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC });
console.log(h.toString());
var z = CryptoJS.AES.decrypt(h, key, { iv: iv, mode: CryptoJS.mode.CBC });
console.log(z.toString());“跑小提琴”
"qx84iCiNL1YYWJhE6nG8KZxOCh4VGOBTaeCEAjy1P+s=“"74657374206d657373616765206e65772074657374206d657373616765”
发布于 2022-06-21 13:27:13
有关解密/加密输出的详细信息可以在CryptoJS:密码输出的文档页面中找到。
正如@dave_汤普森_085在他的评论中所说的,您从h.toString()中看到的输出是一个CipherParams对象,其格式默认为base64,但它的WordArray组件可以分隔。
> data = "qx84iCiNL1YYWJhE6nG8KZxOCh4VGOBTaeCEAjy1P+s="
> base64.b64decode(data)
b'\xab\x1f8\x88(\x8d/V\x18X\x98D\xeaq\xbc)\x9cN\n\x1e\x15\x18\xe0Si\xe0\x84\x02<\xb5?\xeb'它在工作,只是一个正在输出的HexString。快速的Python代码来显示它。
> from binascii import unhexlify
> unhexlify("74657374206d657373616765206e65772074657374206d657373616765")
b'test message new test message'解密输出是一个WordArray。toString()方法打印完整的HexString,而不是32位值的数组。z对象本身正确解密。
https://security.stackexchange.com/questions/262881
复制相似问题