簡體   English   中英

使用AES Crypto-JS進行加密解密在android webview中不起作用?

[英]Encryption decryption with AES Crypto-JS does not work in an android webview?

在我的android應用中的網絡視圖中,我正在嘗試使用Crypto-JS進行加密和解密。 加密工作正常,但解密無效。 我進行了很多搜索,發現沒有找到適合我的解決方案。 我是javascript新手。 在我的另一個應用程序中,我正在android中執行此操作,並且工作正常。 但是用jQuery解密是行不通的。 以下是我正在使用的加密功能:

function encryptText(textvalue, key) {
    var key = CryptoJS.enc.Utf8.parse(key);
    var iv = CryptoJS.lib.WordArray.random(128/8);

    var encrypted = CryptoJS.AES.encrypt(textvalue, key,
       {
          keySize: 128 / 8,
          iv: iv,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
       });

    var pass = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
    var ivpass = encrypted.iv.toString(CryptoJS.enc.Base64);

    return ivpass+pass;
}

它的工作正常。 以下是我正在使用的解密功能:

function decryptText(encrypted, keyParam){
    var key = CryptoJS.enc.Utf8.parse(keyParam);
    var indexOfSeperation = encrypted.indexOf("=="); 

    var iv = encrypted.substring(0, indexOfSeperation+2);
    var value = encrypted.substring(indexOfSeperation + 2);
    console.log("iv: "+iv);
    console.log("value: "+value);

    var valueStr  = CryptoJS.enc.Base64.parse(value);
    var ivStr  = CryptoJS.enc.Base64.parse(iv);

    var decrypted = CryptoJS.AES.decrypt(valueStr, key,
       {
          iv: ivStr,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
       }
   );

   var result = CryptoJS.enc.Utf8.parse(decrypted);
   console.log("result: "+result);
}

結果始終為空。 我做錯了什么嗎?

CryptoJS crypto decrypt()函數期望密文為OpenSSL格式或為特殊對象。

您需要在特殊對象上設置的唯一值是ciphertext屬性:

var decrypted = CryptoJS.AES.decrypt({
        ciphertext: valueStr
    }, 
    key,
    {
        iv: ivStr,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    }
);

此外, decrypted是WordArray。 您需要使用stringify()來獲取字符串:

var result = CryptoJS.enc.Utf8.stringify(decrypted);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM