2017-04-20 12 views
1

私は、(crypto-jsライブラリを使用して)javascriptでメッセージを暗号化し、javaで解読しようとしています。AES javascript encrypt - java decrypt

これはjavascriptのコードです:

var key = CryptoJS.enc.Utf8.parse(aesPassword); 
var ive = CryptoJS.enc.Utf8.parse(aesIv); 
var encryptedData = CryptoJS.AES.encrypt(dataToEncrypt, key, {mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: ive}); 

そして、これはJavaコードです:

final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     final SecretKeySpec key = new SecretKeySpec(aesPassword().getBytes("UTF-8"), "AES"); 
     cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(aesIv().getBytes("UTF-8"))); 
     byte[] decrypted = cipher.doFinal(DatatypeConverter.parseBase64Binary(message)); 

しかし、私はJavaで復号化しようとすると、この例外がスローされます。 javax.crypto.BadPaddingExceptionを:最終ブロックが適切に埋められていない場合

パスワード:6h2faBePVxpgyFSN iv:NKOzRKrmEMKs1kE4暗号化する3210データ: "{トークン:cMGOIrYlJm9lPhPW}"

助けが必要ですか?

事前

+1

あなたは互換性がありますか? – evolutionxbox

+0

はい。他のケースでは、私はjavaで暗号化し、javascriptで解読するとうまくいきます。 – Giamma

+0

あなたのコードは正しいように見えます。あなたの質問とあなたの質問を編集してください。 JavaScriptとJavaを比較するには、キーとIVのバイト配列を16進数でエンコードする必要があります。 –

答えて

0

に私が間違っている可能性のおかげで、私はこのケースでBadPaddingExceptionは、あなたが成功しdecryption.The例外を実行するために正しいキーを持っていないことを意味し、本質的にキーがどちらか短すぎることを意味だと思いますまたは長すぎる(私は思う)。

上記のコードのようなものが動作する可能性があり
Try{ 
    String decrypted = aes.decrypt(...); 
    System.out.println(decryted); 
}catch(Exception e){ 

} 

BadPaddingExceptionがキャッチされていないときにSystem.outにのみ達すると復号化のための可能なキーをしようとしたとき、あなたがいた場合、これは、例えば、ループ内で使用することができ解読のためのすべての可能な鍵を計算しようとしています。

+1

キーは正しいです、そして、それはJavaのメッセージを暗号化し、javascriptのメッセージを解読するのに使用されます。キーは常に同じです – Giamma