2017-11-29 4 views
0

AES/ECB/PKCS5Paddingを使用して文字列をエンコードする必要があります。暗号化された結果(バイトが不要な新しいString(encryptedResult))がパートナーに送信されます。私のパートナーはgetBytes()を使って文字列を解読します。ここで埋め込みのために文字列経由のJava暗号化/復号化が動作しない

は、復号化方法であって、パッドを入れられた暗号を解読するとき 入力長は16の倍数でなければなりません:

public static String decrypter(final String donnees) throws NoSuchAlgorithmException, NoSuchPaddingException, 
     InvalidKeyException, IllegalBlockSizeException, BadPaddingException { 
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
    cipher.init(Cipher.DECRYPT_MODE, key); 

    return new String(cipher.doFinal(donnees.getBytes())); 
} 

私の問題は、私は解読しようとしたとき、私はこのエラーを取得するということです。

バイトを直接デコードするとうまく動作します。 string.getBytes()をパディングなしで作成するにはどうすればよいですか?または他のソリューション?

私は暗号化のalgorythmを変更することはできません。また、文字列についても、パートナーに送信されたバイトではないと言えるでしょう。

+3

このような文字列にバイトを切り替えるだけでは意味がありません。少なくとも、8ビットのエンコーディングを使用するか、Base64のようなものを使用するのが望ましいでしょう。 – Kayaman

+1

https://stackoverflow.com/questions/1536054/how-to-convert-byte-array-to-string-and-vice-versa – Oleg

+0

お互いのおかげで、問題は解決しました。私はバイトの仕組みをかなり間違って理解していました。 –

答えて

1

一般に、パディングエラーは復号化に失敗したことを意味し、失敗には誤ったキー、データ、およびエンコードが含まれる可能性があります。誤った解読は、不正確なパディングを生成する副作用を有する。

この場合、暗号化されたデータが正しくエンコードされていません。暗号化されたデータが文字列として必要な場合、一般的な方法はBase64または16進符号化を使用することです。

このコードは間違っています:new String(cipher.doFinal(donnees.getBytes()));

関連する問題