จะถอดรหัสด้วย CryptoJS โดยใช้ AES ได้อย่างไร

ตามที่คำถามแนะนำ ดูเหมือนว่าฉันไม่สามารถรับค่าที่ถอดรหัสได้อย่างถูกต้องโดยใช้ตัวเลือกที่จำเป็น (AES, โหมด ECB และ PKCS7)

ฉันกำลังเข้ารหัสดังนี้:

  var ENC_KEY = "bXlrZXk=";  //"mykey"

  var encrypted = CryptoJS.AES.encrypt("hello",  CryptoJS.enc.Base64.parse(ENC_KEY), 
    {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
  console.log('encrypted: ' + encrypted);

ซึ่งทำงานตามที่คาดไว้และส่งเอาต์พุตค่าที่เข้ารหัสที่ฉันคาดหวัง แต่เมื่อฉันถอดรหัสโดยใช้ค่าด้านล่าง ฉันจะจบลงด้วยวัตถุว่างที่กำลังส่งออก:

var decrypted = CryptoJS.AES.decrypt(encrypted, CryptoJS.enc.Base64.parse(ENC_KEY), 
    {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    console.log('decrypted: ' + decrypted);

ฉันได้ลองใช้:

console.log('encrypted is decrypted to: ' + decrypted.toString(CryptoJS.enc.Utf8);

แต่ไม่มีความสุข...


person user3197788    schedule 27.11.2014    source แหล่งที่มา


คำตอบ (1)


ฉันลองสิ่งนี้แบบซอ (ดัดแปลงเล็กน้อยเพื่อให้มันใช้งานได้):

//decrypt gives a hex
function hex2a(hexx) {
    var hex = hexx.toString();//force conversion
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}

var key = CryptoJS.enc.Base64.parse("Secret Passphrase"); 

alert(key);

var encrypted = CryptoJS.AES.encrypt("hello",  key, 
    {
        mode: CryptoJS.mode.ECB
    });

alert('encrypted: ' + encrypted);

var decrypted = CryptoJS.AES.decrypt(encrypted, key, 
    {
        mode: CryptoJS.mode.ECB
    });

alert('decrypted: ' + hex2a(decrypted));

http://jsfiddle.net/gttL705r/

และพบว่าการถอดรหัสส่งคืนเลขฐานสิบหกซึ่งอาจไม่ใช่สตริง... นี่อาจทำให้เกิดปัญหาของคุณหรือไม่? ดังนั้น ด้วยฟังก์ชัน hex2ascii ที่รวดเร็ว 'hello' จะกลับมา :)

ฉันยังลบช่องว่างภายในที่ระบุด้วย เนื่องจาก Pkcs7 ได้รับการกล่าวถึงว่าเป็นค่าเริ่มต้นในเอกสาร และฉันไม่พบ src js ที่ฉันต้องการดาวน์โหลด

person neildaemond    schedule 27.11.2014
comment
ขอบคุณ @neildaemond ตอนนี้ฉันกำลังพยายามใช้สิ่งนี้ใน Node เพื่อยอมรับค่าจากเบราว์เซอร์ไคลเอนต์และรับปัญหาเดียวกัน :( stackoverflow.com/questions/27174971/ - person user3197788; 27.11.2014