2017-02-08 10 views
-3

Iamは16バイトでなければなりません。私は(下記の)コードを実行すると、私が手:AES java.security.InvalidAlgorithmParameterException:間違っIVの長さは:私のJavaアプリケーションでAES暗号化を使用してデータを暗号化しようとして長い

java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long 
    at com.sun.crypto.provider.CipherCore.init(CipherCore.java:525) 
    at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:346) 
    at javax.crypto.Cipher.implInit(Cipher.java:806) 
    at javax.crypto.Cipher.chooseProvider(Cipher.java:864) 
    at javax.crypto.Cipher.init(Cipher.java:1396) 
    at javax.crypto.Cipher.init(Cipher.java:1327) 
    at TestEncription.encryptData(TestEncription.java:164) 
    at TestEncription.encodeRequest(TestEncription.java:109) 
    at TestEncription.main(TestEncription.java:65) 

コード:

public String encryptData(String requestData, byte[] sessionKey, 
     String messageRefNo) throws Exception { 

    SecretKey secKey = new SecretKeySpec(sessionKey, "AES"); 
    Cipher cipher = Cipher.getInstance(symmetricKeyAlgorithm); 
    IvParameterSpec ivSpec = new IvParameterSpec(messageRefNo.getBytes("UTF-8")); 
    System.out.println("Seckey: "+secKey); 
    cipher.init(Cipher.ENCRYPT_MODE, secKey, ivSpec); 
    byte[] newData = cipher.doFinal(requestData.getBytes()); 

    return Base64.encodeBase64String(newData); 
} 

ここで間違っに行くということは何ですか?

+1

としてランダムシーケンス提供です:あなたは正確に16バイト長でないIVバイト[]を提供している「間違っIV長を16バイト長でなければなりません」。 –

+0

エラーメッセージはどうなっていますか? – zaph

答えて

3

:あなたは正確に16バイト長でないIVバイト[]を提供している「間違っIV長16バイト長でなければなりません」。

@zaphが指摘するように、ランダムシーケンスを使用しないと、IVを有するの目的に反し。あなたは何をすべき

は、このような

Random rand = new SecureRandom(); 
byte[] bytes = new byte[16]; 
rand.nextBytes(bytes); 
IvParameterSpec ivSpec = new IvParameterSpec(bytes); 
+0

@downvoter何らかの理由で? –

+1

受け入れられる方法は、IVにランダムバイトを使用することです。 IVは復号化の際に使用するために暗号化されたデータの前に付けることができ、秘密である必要はない。 – zaph

+0

作品は今...あなたに – Abhi1988