【发布时间】:2014-08-29 11:34:31
【问题描述】:
我一直在尝试使用 CryptoJS 解密 ArrayBuffer 对象,但到目前为止它总是返回一个空白 WordArray。文件(图像)在 iOS 和 Android 应用程序中加密,发送到服务器,然后下载到此 Web 应用程序中进行解密和显示。 iOS 和 Android 应用程序能够毫无问题地解密文件,因此加密过程没有任何问题。
文件使用XMLHttpRequest 下载,responseType 设置为arraybuffer。到目前为止,这是我的代码:
// Decrypt a Base64 encrypted string (this works perfectly)
String.prototype.aesDecrypt = function(key) {
var nkey = CryptoJS.enc.Hex.parse(key.sha256());
return CryptoJS.AES.decrypt(this.toString(), nkey, {
iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
}
// Decrypt a plain encrypted ArrayBuffer (this is the problem, it always outputs an empty WordArray)
ArrayBuffer.prototype.aesDecrypt = function(key) {
// Get key
if (!key) return null;
var nkey = CryptoJS.enc.Hex.parse(key.sha256());
// Get input (if I pass the ArrayBuffer directly to the create function, it returns
// a WordList with sigBytes set to NaN)
//var input = CryptoJS.lib.WordArray.create(this);
var input = CryptoJS.lib.WordArray.create(new Uint8Array(this));
// Decrypt
var output = CryptoJS.AES.decrypt(input, nkey, {
iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// Output is an empty WordList
console.log("Output: ", output);
}
我的另一个问题是如何将WordArray 转换为ArrayBuffer?
【问题讨论】:
标签: javascript encryption cryptojs arraybuffer