資源簡介
來自StackOverflow的 Jeffrey Walton 的文章中dsa數字簽名算法的java實現,包括生成簽名,消息簽名,驗證簽名三個功能的實現。

代碼片段和文件信息
package?JavaInteropSign;
import?java.io.*;
import?java.security.*;
import?java.security.spec.*;
import?javax.swing.JOptionPane;
/**
?*?@author?jeffrey?walton
?**/
public?class?Main?{
??static?String?ALGORITHM?=?“DSA“;
??
??public?static?void?main(String[]?args)?{
????try?{
??????CreateDSAKeys();
??????SignDSAMessage();
??????
??????VerifyDSAMessage();
????}?catch?(Exception?e)?{
??????System.err.println(“Main:?Exception?“?+?e.toString());
????}
??}
??private?static?void?VerifyDSAMessage()?{
????try?{
??????
??????//?Load?the?public
??????PublicKey?publicKey?=?LoadPublicKey(“public.dsa.java.key“);
??????//?Load?the?message?from?file
??????FileInputStream?mis?=?new?FileInputStream(“dsa.java.msg“);
??????byte[]?message?=?new?byte[mis.available()];
??????mis.read(message);?mis.close();
??????//?Display?the?resurrected?string
??????JOptionPane.showMessageDialog(null
??????????new?String(message?0?message.length?“UTF-8“));???????
??????//?Load?the?signature?of?the?message?from?file
??????FileInputStream?sis?=?new?FileInputStream(“dsa.java.sig“);
??????byte[]?signature?=?new?byte[sis.available()];
??????sis.read(signature);?sis.close();
??????//?Initialize?Signature?object
??????Signature?verifier?=?Signature.getInstance(ALGORITHM);
??????verifier.initVerify(publicKey);
??????//?Load?the?message?into?the?Verifier?object
??????verifier.update(message);
??????//?Verify?the?Signature?on?the?Message
??????boolean?result?=?verifier.verify(signature);
??????
??????StringBuilder?sb?=?new?StringBuilder();
??????if(?result?)
??????{
????????sb.append(“Message?Verified:\n“);
????????sb.append(new?String(message?0?message.length?“UTF-8“));
??????}
??????else
??????{
????????sb.append(“Message?Not?Verified“);
??????}
??????
??????JOptionPane.showMessageDialog(null?sb.toString());
????}?catch?(Exception?e)?{
??????System.err.println(“VerifyDSAMessage:?“?+?e.toString());
????}
??}
??
??private?static?void?SignDSAMessage()?{
????try?{
??????//?Retrieve?the?Private?Key
??????PrivateKey?privateKey?=?LoadPrivateKey(“private.dsa.java.key“);
??????//?Create?the?signer?object
??????Signature?signer?=?Signature.getInstance(ALGORITHM);
??????signer.initSign(privateKey?new?SecureRandom());
??????//?Prepare?the?Message
??????String?s?=?“Crypto?Interop:?\u9aa8“;
??????//?Save?the?binary?of?the?String?which?we?will?sign
??????byte[]?message?=?s.getBytes(“UTF-8“);
??????//?Insert?the?message?into?the?signer?object
??????signer.update(message);
??????byte[]?signature?=?signer.sign();
??????//?mos:?message?filestream
??????//?sos:?signature?filestream
??????FileOutputStream?mos?=?new?FileOutputStream(“dsa.java.msg“);
??????mos.write(message);
??????FileOutputStream?sos?=?new?FileOutputStream(“dsa.java.sig“);
??????sos.write(signature);
????}?catch?(Exception?e)?{
??????System.err.println(“SignDSAMessage:?“?+?e.toString());
????}
??}
??private?static?PublicKey?LoadPublicKey(String?filename)?{
????PublicKey?key?=?null;
????try?{
??????FileInputStrea
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\build\
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\build\classes\
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\build\classes\JavaInteropSign\
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\build\test\
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\build\test\classes\
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\build\test\results\
?????文件??????????85??2008-04-25?19:17??JavaInteropSign\manifest.mf
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\nbproject\
?????文件???????33178??2008-04-25?19:17??JavaInteropSign\nbproject\build-impl.xm
?????文件?????????455??2008-04-25?19:17??JavaInteropSign\nbproject\genfiles.properties
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\nbproject\private\
?????文件?????????188??2008-04-25?19:17??JavaInteropSign\nbproject\private\private.properties
?????文件????????1824??2008-04-25?19:17??JavaInteropSign\nbproject\project.properties
?????文件?????????585??2008-04-25?19:17??JavaInteropSign\nbproject\project.xm
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\src\
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\src\JavaInteropSign\
?????文件????????5070??2008-04-25?23:12??JavaInteropSign\src\JavaInteropSign\Main.java
?????目錄???????????0??2008-04-25?23:17??JavaInteropSign\test\
?????目錄???????????0??2008-04-26?10:48??JavaInteropSign\
評論
共有 條評論