我有研究許多源代碼,並發現如何指定在AES Java塊大小的困難? Java支持到256位嗎?我已經搜索出php源代碼,它支持直到256位AES加密如何在java中使用AES 256位加密數據?
這是AES加密的示例源代碼。感謝所有幫助我弄清楚。 http://aesencryption.net/
我有研究許多源代碼,並發現如何指定在AES Java塊大小的困難? Java支持到256位嗎?我已經搜索出php源代碼,它支持直到256位AES加密如何在java中使用AES 256位加密數據?
這是AES加密的示例源代碼。感謝所有幫助我弄清楚。 http://aesencryption.net/
PHP支持的Rijndael使用256塊大小。 AES是Rijndael的一個子集,密鑰大小爲128,192和256位,的塊大小爲128位。所以說PHP支持256位塊的AES是一個矛盾(即不正確)。
雖然您需要無限加密文件才能使用192位和256位加密,但由Oracle提供的Java SE(直至幷包括Java 9)僅支持128位塊大小和所有(3)AES密鑰大小的AES。
要使用Rijndael的256位數據塊的大小,你可以使用充氣城堡輕量級API,塊大小不同,沒有加入到充氣城堡供應商之一:
new RijndaelEngine(256)
對於Android版可能要使用海綿改爲城堡。
並且不要相信帶有花哨名稱的clickbait網站。 –
嘗試:
public static void main(String[] args) {
String key = "1234567890ABCDEF";
try {
byte[] encrypt = encrypt("hello word",key);
System.out.println(new String(encrypt));
String decrypt = decrypt(encrypt, key);
System.out.println(decrypt);
} catch (Exception ex) {
}
}
public static byte[] encrypt(String message, String key1) throws Exception {
SecretKeySpec key = new SecretKeySpec(key1.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(message.getBytes());
}
public static String decrypt(byte[] message, String key1) throws Exception {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(key1.getBytes(), "AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedByte = cipher.doFinal(message);
String decryptedText = new String(decryptedByte);
return decryptedText;
}
我發現你使用「AES」的SecretKeySpec並提供32個字節的密鑰。它看起來像你使用的是一個16字節的密鑰,其上面是AES128。如果你得到異常「InvalidKeyException:非法密鑰大小異常」並不是因爲你的代碼錯誤,這是因爲你沒有設置強大的加密策略。至少這是我用Java發現的,不知道你是否會遇到這種情況與Android。 – slipperyseal
給定代碼的塊大小和密鑰大小都是128位,所以實際上並不能回答OP的問題,但很差。 –
TRY IT對解決方案不是很好的描述。除此之外,你的代碼有很多問題,例如使用ECB,忘記指定字符編碼,明確指定SunJCE(@SlipperySeal,這意味着它甚至不會在Android上運行:P),使用文本字符串作爲鍵,打印出不加密的密文,不好的異常處理...(然後你再次拼寫正確的加密/解密,並且在解密之前將密文視爲二進制字符串)。 –
看到我下面的評論。我發現你只需要用32字節的鍵值創建SecretKeySpec作爲「AES」鍵。這使其處於AES256模式。 – slipperyseal
有沒有這樣的東西,AES的塊大小爲256位。你的意思是鑰匙大小? –