2017-01-31 197 views
1

在我的後端側他們創造使用AES算法加密的消息與這一段代碼AES的Java加密16字節與目標C密鑰解密

鍵16字節的密鑰:h7Ui63Mzqj61G87j

public static String encrypt(String data, byte[] secretKey) throws Exception { 
    Key key = generateKey(secretKey); 
    Cipher c = Cipher.getInstance(ALGORITHM); 
    c.init(Cipher.ENCRYPT_MODE, key); 
    byte[] encVal = c.doFinal(data.getBytes()); 
    String encryptedValue = new BASE64Encoder().encode(encVal); 
    if (logger.isDebugEnabled()) { 
     logger.debug(String.format("DataToEncrypt: %s, encryptedValue: %s", data, encryptedValue)); 
    } 
    return encryptedValue; 
} 

但我不能用相同的密鑰使用AES算法解密消息

我提到很多鏈接和博客沒有幫助我,任何人都可以請幫我解決這個問題。

+0

您的鑰匙長16個字符。你如何將它轉換成32字節? – Codo

+0

好吧,現在我們有16 *個字符*和16 *字節*。你如何從字符轉換爲字節? – Codo

+1

並且請顯示迄今爲止您所擁有的Objective-C代碼。並告訴我們「我無法解密信息」的含義。不編譯?它會崩潰嗎?它會產生錯誤的輸出嗎?什麼是輸入,什麼是預期的輸出,什麼是有效的輸出? – Codo

回答

1

請參考下面這個鏈接,

https://github.com/callmewhy/why-encrypt

希望它的幫助十足。

+0

是的,謝謝你的工作正常。 – ASV

+0

發佈相關信息,以防萬一鏈接崩潰。 – Jamal

+0

引用的代碼使用ECB模式。不要使用ECB模式,它不安全,請參閱[ECB模式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29),向下滾動到企鵝。 取而代之的是將CBC模式與隨機IV一起使用,只是將加密的數據與IV一起用於解密,它並不需要保密。 – zaph