2012-02-09 108 views
2

我已經有一個密鑰對,公鑰和私鑰。我如何實際使用java.security.Signature來驗證使用其中一個密鑰簽名的字符串?如何使用java.security.Signature進行驗證

編輯:

我有兩個鍵作爲字符串。該驗證方法,它實際上是

verify(byte[] signature) 

的Javadoc說:

verify(byte[] signature)指示給定簽名是否可以 使用公共密鑰或簽名者的證書驗證。

在我調用驗證方法之前,我會如何讓該簽名識別哪個公用/專用密鑰用於驗證?換句話說,如何將我的字符串鍵轉換爲可被簽名接受的關鍵對象?

+0

是否有任何機會的方法名爲'verify'在這門課嗎?如果是這樣,也許你有一個更具體的問題。 – 2012-02-10 00:21:45

回答

5
  1. 使用KeyFactory將關鍵規格轉換爲對象。
  2. 致電Signature.getInstance(algName)獲取簽名實例。
  3. 使用SignatureinitVerify方法來將密鑰與簽名驗證相關聯。
  4. 使用update來填充Signature字節。
  5. 最後,請致電verify
  6. 利潤

KeyFactory的javadoc:

以下是如何才能根據其編碼實例化DSA公鑰使用密鑰工廠的例子。假設Alice收到了Bob的數字簽名。鮑勃還給她發了他的公鑰(編碼格式)以驗證他的簽名。愛麗絲然後執行以下操作:

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 2012-02-10 01:51:15

+0

@sammiwei,我不知道它是否是「RSASSA-PSS」或者你的情況適合的算法名稱,但是你是正確的,因爲你需要用兩個'DSA'替換正確的名字在這個例子中的地方。 – 2012-02-10 02:00:49

+0

太棒了!非常感謝!! – sammiwei 2012-02-10 02:03:31