2015-12-17 79 views
4

我想實現算法AES 128中的Android,但它不工作,問題是import javax.xml.bind.DatatypeConverter;替代品DatatypeConverter在Android的

DatatypeConverter.parseHexBinary(key)DatatypeConverter.printBase64Binary(finalData)

是否另一種存在?

我的方法:

private static final String ALGORIT = "AES"; 

public static String encryptHackro(String plaintext, String key) 
throws NoSuchAlgorithmException, NoSuchPaddingException, 
InvalidKeyException, IllegalBlockSizeException, 
BadPaddingException, IOException, DecoderException { 


    byte[] raw = DatatypeConverter.parseHexBinary(key); 

    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
    Cipher cipher = Cipher.getInstance(ALGORITMO); 
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 

    byte[] cipherText = cipher.doFinal(plaintext.getBytes("")); 
    byte[] iv = cipher.getIV(); 

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    outputStream.write(iv); 
    outputStream.write(cipherText); 

    byte[] finalData = outputStream.toByteArray(); 

    String encodedFinalData = DatatypeConverter.printBase64Binary(finalData); 

    return encodedFinalData; 

} 

我看到別人answers,但我無法實現的解決方案。

+0

爲什麼你不能使用給定的替代方案?你遇到了什麼問題? –

+0

加密結果不同 –

+0

然後你做錯了什麼。你應該顯示你的嘗試。 –

回答

10

解決方案

我解決了使用

compile 'commons-codec:commons-codec:1.3' 

我的問題,我用android.util.Base64爲Android

不相容/更換

DatatypeConverter.parseHexBinary 
org.apache.commons.codec.binary.Hex.decodeHex(key.toCharArray()); 




DatatypeConverter.printBase64Binary(finalData); 
android.util.Base64.encodeToString(finalData, 16) 



DatatypeConverter.parseBase64Binary(encodedInitialData); 
org.apache.commons.codec.binary.Hex.decodeHex(key.toCharArray()); 
+0

Commons-codec 1.3不是Android API的一部分。如果Google在未來版本的Android中更改公共編解碼器的版本,會發生什麼情況?這只是巧合,因爲版本1.3恰好與Android的根類加載器中的版本相匹配。我試圖解決的情況是,base64解碼用於包含在Android應用程序中的純Java子項目。這是非常討厭谷歌這個.. –

+0

這不是一個可靠的解決方案 –