2017-09-13 58 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