开发的我想在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