2

ハッシュと比較するために公開鍵で文字列を復号化しようとしています。コードは次のとおりです

byte[] dectyptedText = null;
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
dectyptedText = cipher.doFinal(text);
return dectyptedText;

上記のコードは、次のような文字列を生成します (base64encode)

MCEwCQYFKw4DAhoFAAQUy3qkZYgfRVo2Sv1F9bHa3pDs044=

ハッシュは次のコードによって生成されます

 byte[] key = stringToHash.getBytes();
 MessageDigest md = MessageDigest.getInstance("SHA-1");
 hash = md.digest(key);

上記のコードは、次のようなサンプル ハッシュを生成します。

y3qkZYgfRVo2Sv1F9bHa3pDs044 =

両方がy3qkZYgfRVo2Sv1F9bHa3pDs044 = である正しいハッシュを持っていることに気付いた場合 = しかし、復号化コードは余分なMCEwCQYFKw4DAhoFAAQUを生成して先頭に追加します

この余分なものがどのように追加され、その理由が理解できません。

誰かがこれに光を当てることができますか?

ありがとう

プレミアム

4

2 に答える 2

6

それが PKCS1 パディングです。アルゴリズムは、pkcs パディングをクリア テキスト データ (つまり、ハッシュ) に追加して、繰り返し暗号化されたプレーン テキスト データに基づく攻撃を防ぎます。これは、入力データをランダム化する方法です。同じキーを使用してまったく同じハッシュを再暗号化すると、異なる pkcs ヘッダー データ (そしてもちろん異なる暗号ブロック) が得られます。当然のことながら、pkcs パディングは固定長であるため、それを取り除いて元のプレーン テキストを取得できます。

于 2013-09-25T08:22:07.880 に答える