開發的我想在android中加密此javascript代碼。遵循Android中的相同加密CryptoJS
let base64Key = CryptoJS.enc.Base64.parse(key);
let encryptedValue = CryptoJS.AES.encrypt(value, base64Key, {
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
iv: base64Key
});
return encryptedValue.toString();
代碼:
String encryptedKey = Base64.encodeToString(keyword.getBytes(), Base64.NO_WRAP);
Key key = new SecretKeySpec(encryptedKey.getBytes(), algorithm);
Cipher chiper = Cipher.getInstance("AES");
chiper.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = chiper.doFinal(plainText.getBytes());
String encryptedValue = Base64.encodeToString(encVal, Base64.NO_WRAP);
return encryptedValue;
但它返回一個完全不同的價值。
代碼本身的第一線在兩種情況下會返回一個不同的值:
所以我得到了這部分工作。 我只需要以下行添加到Android代碼:
byte[] decoded = Base64.decode(key.getBytes());
String hexString = Hex.encodeHexString(decoded);
這是CryptoJS.enc.Base64.parse(key);
此行CryptoJS相當。
但仍試圖找出最終結果。兩者都不同。
我無法更改JavaScript代碼。我只能訪問android代碼。所以我需要在android中進行更改。我如何改變這在android? – user2893564
問題是,在JavaScript中,您將密鑰轉換爲「Word數組」,並在Java代碼中將密鑰轉換爲64位編碼的字符串。那是不一樣的 – UKoehler
是的。我讀到:「CryptoJS中的大多數結果對象都是WordArray類型,當您在這樣的對象上調用toString()函數時,會得到該二進制對象的Hex編碼字符串。」 – user2893564