2012-04-17 19 views
18

AESアルゴリズムを使用してデータを暗号化しようとしていました。 ただし、次の例外が発生しています。java.security.NoSuchAlgorithmException:AES/ECB/PKCS7PADDINGをサポートするプロバイダが見つかりません

java.security.NoSuchAlgorithmException: 
    Cannot find any provider supporting AES/ECB/PKCS7PADDING 

誰かがこの問題の解決方法を知っていますか? 私のJDKのバージョンは1.7です。

+0

ECBはCPA安全ではないことに注意してください。代わりにCBCを使用してください(保存されたデータの機密性を欲する場合)。 –

答えて

28

ブロック暗号の使用にPKCS#7のパディングを指定する必要はありません。 PKCS#5パディングを指定します。 PKCS#5はブロック暗号で使用するように指定されていますが、PKCS#7は使用されません(S/MIMEなどの異なる場所で使用されます)。私は、PKCS#5とPKCS#7が実際に同じタイプのパディングを指定していることを指摘します(同じですが!)が、このコンテキストで使用される場合は#5と呼ばれます。 :)

"AES/ECB/PKCS7PADDING"の代わりに"AES/ECB/PKCS5PADDING"が必要です。これは、Javaプラットフォームのすべての実装がサポートする必要がある暗号実装です。詳細は、documentation of the Cipher classを参照してください。

+0

あなたの答えは大変ありがたいです.JCEプロバイダはPKCS7PADDINGをサポートしていませんか? –

+2

正しい。それはそうではありません(#5と#7は同じパディングなので、あなたが言うと思いますか?)。そして、あなたは大歓迎です。あなたがそれに満足しているなら、答えを受け入れることを忘れないでください。 :) – jeffsix

+4

この答えは大丈夫ですが、ブロック暗号にPKCS#7パディングを使用したいので少し混乱します。 [標準アルゴリズム名](http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Cipher)によると、PKCS7Paddingは間違った名前です。 #7は、ブロック暗号で暗号化されたメッセージをパディングするために、このパディングスキームを使用します。より大きな文脈が何であるかは関係ありません。 – erickson

1

あなたはAES/ECB/PKCS7Paddingを使いたいならば、快活なお城は、PKCS#5、PKCS#7暗号化標準のテキストを含んで、問題の非常に包括的な説明については、HT tp://www.bouncycastle.org/specifications.html

+0

真ですが、それは下の同じパディングアルゴリズムです。 –

3

をしてくださいサポートします見てくださいhere


PKCS#5パディングは、1〜8バイトのパディングを意味します。パディングバイト自体には、パディングバイト数がバイトとしてエンコードされています。 PKCS#5パディングはDESに指定されていましたが、ブロックサイズが8バイトの任意のブロック暗号に適しています。

今やDES仕様、さらにはパスワードベースの暗号化のためのPKCS#5仕様さえもJavaに先立ってかなり長い時間がかかります。 2002年にAESは標準化されましたが、Javaを経てずっと待っていて、Java 2も導入されました。 AESが登場する前に、(3つの)DESとPKCS#5パディングがJavaに統合されました。

Java(正確には、Sun JCEプロバイダがAES機能を獲得したときには、ブロックサイズが16バイトのパディング方法が必要でした。 PKCS#7は、2〜255バイトのブロックサイズ(ゼロベースの符号なし整数をエンコードする場合は1バイトの最大値)に対して定義されていることを除いて、この埋め込み方法をis identical to PKCS#5 paddingと指定します。しかし、パディングの方法は既にそこにありました。それは"PKCS5Padding"と命名されました。したがって、新しい名前を導入する代わりに、"PKCS5Padding"を単に再利用しました。

PKCS#5のパディングが正しくないため、サンプロバイダは実際に"PKCS7Padding"をサポートする必要があります。これは単なるJavaの命名問題ではなく、暗号プロトコルを実装しようとする開発者やJavaに他のアプリケーションを移植しようとする開発者にとっては問題になります。今のところ"PKCS7Padding"の代わりに"PKCS5Padding"を使用してください。

関連する問題