2017-09-13 73 views
0

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

但仍试图找出最终结果。两者都不同。

回答

0

终于得到了它在Android中使用工作下面的代码,如果有其他人面临问题:

public static String encrypt(String key, String value) { 
    try { 
     SecretKey secretKey = new SecretKeySpec(Base64.decode(key.getBytes(), Base64.NO_WRAP), "AES"); 
     AlgorithmParameterSpec iv = new IvParameterSpec(Base64.decode(key.getBytes(), Base64.NO_WRAP)); 
     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv); 

     return new String(Base64.encode(cipher.doFinal(value.getBytes("UTF-8")), Base64.NO_WRAP)); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
0

要打开一个文本字符串(UTF-8编码)为基64字符串,你需要:

var textString = 'Hello world'; // Utf8-encoded string 
var words = CryptoJS.enc.Utf8.parse(textString); // WordArray object 
var base64 = CryptoJS.enc.Base64.stringify(words); // string: 'SGVsbG8gd29ybGQ=' 
+0

我无法更改JavaScript代码。我只能访问android代码。所以我需要在android中进行更改。我如何改变这在android? – user2893564

+0

问题是,在JavaScript中,您将密钥转换为“Word数组”,并在Java代码中将密钥转换为64位编码的字符串。那是不一样的 – UKoehler

+0

是的。我读到:“CryptoJS中的大多数结果对象都是WordArray类型,当您在这样的对象上调用toString()函数时,会得到该二进制对象的Hex编码字符串。” – user2893564