2017-02-10 65 views
0
PGP簽名的驗證

我產生了PGP簽名:使用BouncyCastle的

-----BEGIN PGP SIGNATURE----- 
Version: GnuPG v2 

iQEcBBABCAAGBQJYnkPxAAoJEBFjzYGyXBOsXRoH/3O4bwKK45aUN+m0N4jsZ+n5 
W8R/aGti/llvJ62tHBCO5BIp/pp+b1Gdv99xtnJXHu/f0TqPYj+fwq4vfaorNTtA 
Vtq8MaMesw1OWZEfu/lyjNOwdg81FUlYkw0Bjo3H/MxWjWYUiHmJo+OGriyf5dv/ 
433ZqitZMxLHCfZsuoU5teZ0BPUSoNjF6hOFK3ZI7QXsgYUyohzW2goy9bDVCKRq 
e73CHpnMKCrnDc+/4+sK349bD/cZp6/c0T8b7cBCeBGGilPD6ovJUQE5vhGTKnJM 
lgyxhA87tw9wqFwpZXDr0nzOP+MFfE9WRGecVYZ9G+LP/biefSe5iWRaPIcZIi0= 
=qUHb 
-----END PGP SIGNATURE----- 

code在這裏,與BouncyCastle的實現:

(sign "project.clj" 
     "project.clj.asc" 
     <FILENAME> 
     "98B9A74D") 

我希望能夠讀取該簽名和使用公鑰驗證它。這將如何變回BouncyCastle org.bouncycastle.openpgp.PGPSignature對象?

回答

0

這將如何轉回BouncyCastle ... PGPSignature對象?

提取從bcpg罐子提供org.bouncycastle.openpgp.examples.DetachedSignatureProcessor相關的代碼,並專門到你的情況(裝甲,未壓縮):

InputStream in = new org.bouncycastle.bcpg.ArmoredInputStream (new FileInputStream (filename)); 
// or substitute other InputStream depending on where this data is available 
org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory pgpFact = new org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory(in); 
org.bouncycastle.openpgp.PGPSignatureList p3 = (org.bouncycastle.openpgp.PGPSignatureList)pgpFact.nextObject(); 
org.bouncycastle.openpgp.PGPSignature sig = p3.get(0); 
in.close(); // not in example but needed in quality code 

我希望能夠讀取該簽名和驗證使用公鑰。

該示例的其餘部分展示了一種驗證給定publickey(在發佈文件的示例中)和相關數據(在該示例中也是文件)的這種PGPS簽名的方法。

+0

質量代碼也會在發生異常時關閉文件。這最好通過使用「try with resources」來完成:'try(InputStream in = new org.bouncycastle.bcpg.ArmoredInputStream(new FileInputStream(filename))){'。這樣java將自動關閉文件給你,不需要明確的關閉。 –

+0

@KlasLindbäck:很好,儘管我看過的BC例子並不使用try-resources,大概是因爲BC把它們的代碼宣告爲可移植到1.5。他們同樣使用明確的強制轉換,而不是像'List '這樣的表格,我覺得這更令人討厭。 –