2013-04-25 77 views
0

我正在嘗試創建一個程序,該程序將使用javax.crypto.Cipher API檢查數字簽名。在調用doFinal之前檢查RSA密鑰是否正確?

只要RSA密鑰配對正確,我的程序就能正常工作。然而,當我有一個不正確的密鑰試圖解密消息,我得到一個例外:

BadPaddingException: Data must start with zero

在調用

byte[] signature = cipher.doFinal(); 

我想成爲能夠在調用doFinal之前檢查密鑰是否工作,否則,優雅地退出。我已經將doFinal包裝在try/catch塊中,嘗試關閉我的UDP套接字,但這不起作用。

如果任何人都可以指出我正確的方向,我將不勝感激。

回答

1

您應該使用Signature類來處理RSA簽名驗證。

Signature sig = Signature.getInstance("SHA256withRSA"); // Adjust as necessary 
sig.initVerify(publicKey); 
sig.update(dataThatWasSigned); 

try { 
    boolean validSignature = sig.verify(signatureYouReceived); 
} catch (SignatureException e) { 
    // Graceful handling belongs here... 
} 
+0

工作。非常感謝。 – michaelp 2013-04-26 13:22:25