2016-12-01 427 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允許我改變我的十六進制字符串字節數組,我得到的結果需要。