2013-02-22 81 views
1
public static String doGenerate() { 
    int val = 10000000; 
    Random r = new Random(); 
    int gen = r.nextInt(89999999); 
    int gen1 = r.nextInt(89999999); 
    gen = val + gen; 
    gen1 = val + gen1; 
    String reply = gen + "" + gen1; 
    return reply; 
} 

這是我用來生成密鑰的方法,我需要用於下面給出的AES算法。Java - SHA-256散列:無效的AES密鑰長度:64字節

public static void decryptFile(String keyString, String fileName){ 
    try { 
     KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
     kgen.init(128); 
     SecretKey key = (SecretKey) new SecretKeySpec(
      keyString.getBytes(), "AES");// kgen.generateKey(); 

     AESEncrypter encrypter = new AESEncrypter(key); 

     encrypter.decrypt(new FileInputStream(
      new java.io.File("").getCanonicalFile() + 
      File.separator + "Received"+ 
      File.separator + fileName), 
      new FileOutputStream(new java.io.File("").getCanonicalFile() + 
      File.separator + "Decrypted" + 
      File.separator + fileName)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

這是AESEncrypter方法。

public AESEncrypter(SecretKey key) { 
    // Create an 8-byte initialization vector 
    byte[] iv = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 
      0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; 

    AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv); 
    try { 
     ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 

     // CBC requires an initialization vector 
     ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); 
     dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

解密後,我得到一個無效鍵例外:java.security.InvalidKeyException:無效的AES密鑰長度:64個字節。這是爲什麼發生?有沒有解決方案?

+0

64字節它說.. – 2013-02-22 06:41:30

回答

1

您的密鑰生成函數有缺陷 - 它只生成整數並將其轉換爲字符串,大量減少可用密鑰空間並顯着減弱密鑰。

但是,它確實產生了16個適合AES密鑰的字節值。自上次收到錯誤信息以來,我只能假設你已經更改了代碼?

我強烈建議您恢復爲僅使用KeyGenerator來生成您的AES密鑰。這將以安全的方式進行。

+1

實際上,它返回16個字符。這可能不會編碼爲16個字節,雖然它通常。 UTF-16應將其編碼爲32個字節。這仍然不能解釋64個字節。 – 2013-02-25 02:11:28

+0

謝謝..我現在就明白了.. :) – 2013-04-01 05:52:03

相關問題