2016-12-01 428 views
1

我正在开发Android应用程序,我想用AES-128做加密。 我使用密钥和十六进制文本。Android AES加密密钥

我使用这个网站:http://testprotect.com/appendix/AEScalc计算具有以下主要AES加密:“c4dcc3c6ce0acaec4327b6098260b0be”和我的文字进行加密是:“6F4B1B252A5F0C3F2992E1A65E56E5B8”(十六进制)。

所以从这个网站的结果给我“859499d0802de8cc6ba4f208da648a8f”,这就是我想得到的结果。 http://hpics.li/d89105a

我在网上找到一些代码,但很多使用种子来生成随机密钥,我想修复密钥。 其实我使用下面的代码,我认为这是我需要的代码,但结果给我D/resultdebug: 72adc67b6d11e1c5fb89ddf5faeb0e030686b91f8bfaf6c41335f08955343f87 ,它不是网站的结果,我想要的。

String text16 = "6F4B1B252A5F0C3F2992E1A65E56E5B8"; 
    String secret16 = "c4dcc3c6ce0acaec4327b6098260b0be"; 

    SecretKeySpec sks = new SecretKeySpec(secret16.getBytes(),"AES"); 
    Cipher c = Cipher.getInstance("AES"); 

    c.init(Cipher.ENCRYPT_MODE, sks); 
    c.update(text16.getBytes()); 
    byte[] ciphertext = c.doFinal(); 
    Log.d("resultdebug",new String(Hex.encode(ciphertext), "ASCII")); 

你能告诉我什么是错的,谢谢。

+0

'ENCRYPT_MODE'的值是什么? – zaph

回答

0

您不是将十六进制转换为二进制,而是获取字符的二进制而不是十六进制编码的值。

0

感谢zaph,它解决了我的问题

我说我的两行代码:

byte[] text = stringhextobyte(text16); 
    byte[] secret = stringhextobyte(secret16); 

而且功能stringhextobyte允许我改变我的十六进制字符串字节数组,我得到的结果需要。