2012-02-09 14 views
2

私はすでに公開鍵と秘密鍵のペアを持っています。 java.security.Signatureを実際に使用して、キーの1つで署名した文字列の検証を行うにはどうすればよいですか?java.security.Signatureを使用して確認する方法

編集:

私は両方のキーをストリングとして持っています。方法を確認し、それが実際に

verify(byte[] signature) 

javadocは言うです:

verify(byte[] signature)は、与えられた署名は は、公開鍵または署名者の証明書を使用して検証することができるかどうかを示します。

私はverifyメソッドを呼び出す前に、その署名がその検証に使用するpublic/privateキーをどのように認識するのでしょうか?言い換えれば、文字列キーを署名によって受け入れられるキーオブジェクトにするにはどうすればよいですか?

+0

が万が一あっ、そのクラスで 'verify'という名前のメソッドですか?もしそうなら、もっと具体的な質問があるかもしれません。 –

答えて

5
  1. KeyFactoryを使用して、キーの仕様をオブジェクトに変換します。
  2. 署名インスタンスを取得するには、Signature.getInstance(algName)を呼び出します。
  3. SignatureinitVerifyメソッドを使用して、署名検証に鍵を関連付けます。
  4. updateを使用してSignatureバイトを入力します。
  5. 最後に、verifyを呼び出します。
  6. KeyFactoryのjavadocから利益

以下は、そのエンコーディングからDSA公開鍵をインスタンス化するために、鍵ファクトリを使用する方法の例です。アリスがボブからデジタル署名を受信したとします。ボブはまた、自分の公開鍵を(符号化形式で)自分の署名を検証するために送りました。アリスは、次のアクションを実行します。

X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey); 
KeyFactory keyFactory = KeyFactory.getInstance("DSA"); 
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec); 
Signature sig = Signature.getInstance("DSA"); 
sig.initVerify(bobPubKey); 
sig.update(data); 
sig.verify(signature); 
+0

返事をありがとう。私の場合、「DSA」を「RSA」に変更します。 – sammiwei

+0

@sammiwei、私はそれが '' RSASSA-PSS ''か、適切なアルゴリズム名があなたの状況にあるのかどうかは分かりませんが、あなたは' 'DSA''の正しい名前を2つその例の場所。 –

+0

素晴らしい!どうもありがとうございます!! – sammiwei

関連する問題