我需要使用AES CBC無鍵盤對JavaScript進行加密,將HTTP和加密數據作爲HEX通過HTTP傳遞,然後在服務器端用JavaScript解密。crypto-js不能解密它加密的東西
解密功能的作品,我能正確解密數據正確使用hurlant AS3庫ecrypted。但是,下面的加密不起作用 - 結果不能使用解密功能解密,也不能使用hurant demo解密:http://crypto.hurlant.com/demo/
而不是實際數據,我使用「1234」作爲消息在這個例子中。
我已經搜查,發現任何本庫或它的功能沒有文檔,超越快速入門指南其中只有微不足道的情況下,所以一切都是通過試驗和錯誤。我已經嘗試了數百種以下的變體。
實例產生IV爲十六進制: 「15ae89d17f632d21f0cda04734d38694」
例產生encrypte數據作爲HEX: 「44ddf295」
示例消息: 「15ae89d17f632d21f0cda04734d3869444ddf295」
有人能看到什麼是錯在我的加密()函數?
// this function doesnt work - the resultant message (which is
// IV+Ecypted text all as HEX cannot be decrypted.
function encrypt() {
var key = CryptoJS.enc.Hex.parse('48656c6c6f2c20576f726c6421888888');
var IVLEN = 16; // Im guessing this is 16 bytes.
var iv= CryptoJS.lib.WordArray.random(IVLEN);
var encrypted;
var message;
encrypted = CryptoJS.AES.encrypt("1234", key, { iv: iv, padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.CBC });
message = CryptoJS.enc.Hex.stringify(iv) + CryptoJS.enc.Hex.stringify(encrypted.ciphertext);
var test = decrypt(message); // throws a malformed UTF-8 exception
alert (test); // should alert "1234"
return message;
}
// this function works perfectly with data generated using HURLANT crypto libs.
function decrypt(data) {
var key = CryptoJS.enc.Hex.parse('48656c6c6f2c20576f726c6421888888');
var ivHexStr, iv;
var encMessageHexStr;
var IVLEN = 32; // This is 16 bytes, as one byte is 2 Hex chars.
var encrypted = {};
var decrypted;
var result;
ivHexStr = data.substring(0,IVLEN);
encMessageHexStr = data.substring(IVLEN);
iv = CryptoJS.enc.Hex.parse(ivHexStr);
encrypted.key = key;
encrypted.iv = iv;
encrypted.ciphertext = CryptoJS.enc.Hex.parse(encMessageHexStr);
decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv, padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.CBC });
result = CryptoJS.enc.Utf8.stringify(decrypted);
return(result);
}; //decrypt()
感謝您的答覆。我一直使用它沒有填充之間Hurlant(加密沒有填充)和JavaScript(沒有填充解密)沒有問題多年,所以它確實工作。 JavaScript到JavaScript應該很容易! Hurlant AS3和crypto js之間沒有兼容的填充方案(hurlant只有沒有或PKCS#5,cryptojs只有:Pkcs7,Iso97971,AnsiX923,Iso10126,ZeroPadding,NoPadding) – 2013-03-21 12:53:59
不使用填充是不可能的一個合適的CBC算法,有許多方法[CTS](http://en.wikipedia.org/wiki/Ciphertext_stealing)可以使CBC看起來像不使用填充,但它實際上是使用部分密文進行填充。我毫不懷疑,由於這種配置,你遇到了問題,看着即使沒有選擇也會填充某些東西的hurlant演示,但pkcs5與pkcs7相同,只是一個較小的塊大小(這不適用於aes )所以我猜這只是一個錯誤的命名。因此請填充pkcs5/7或切換到CFB或OFB模式。 – jbtule 2013-03-21 13:15:02