2016-12-15 36 views
-1

我有研究許多源代碼,並發現如何指定在AES Java塊大小的困難? Java支持到256位嗎?我已經搜索出php源代碼,它支持直到256位AES加密如何在java中使用AES 256位加密數據?

這是AES加密的示例源代碼。感謝所有幫助我弄清楚。 http://aesencryption.net/

+0

看到我下面的評論。我發現你只需要用32字節的鍵值創建SecretKeySpec作爲「AES」鍵。這使其處於AES256模式。 – slipperyseal

+1

有沒有這樣的東西,AES的塊大小爲256位。你的意思是鑰匙大小? –

回答

1

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版可能要使用海綿改爲城堡。

+0

並且不要相信帶有花哨名稱的clickbait網站。 –

-3

嘗試:

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; 
    } 
+0

我發現你使用「AES」的SecretKeySpec並提供32個字節的密鑰。它看起來像你使用的是一個16字節的密鑰,其上面是AES128。如果你得到異常「InvalidKeyException:非法密鑰大小異常」並不是因爲你的代碼錯誤,這是因爲你沒有設置強大的加密策略。至少這是我用Java發現的,不知道你是否會遇到這種情況與Android。 – slipperyseal

+1

給定代碼的塊大小和密鑰大小都是128位,所以實際上並不能回答OP的問題,但很差。 –

+0

TRY IT對解決方案不是很好的描述。除此之外,你的代碼有很多問題,例如使用ECB,忘記指定字符編碼,明確指定SunJCE(@SlipperySeal,這意味着它甚至不會在Android上運行:P),使用文本字符串作爲鍵,打印出不加密的密文,不好的異常處理...(然後你再次拼寫正確的加密/解密,並且在解密之前將密文視爲二進制字符串)。 –