⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 有关mysql文章教程,本人收集的一些有关mysql文章教程
💻
字号:
在java中编程实现数字签名系统
<html><head><meta http-equiv=Content-Type content=text/html; charset=gb2312><TITLE>在java中编程实现数字签名系统:CSDN论坛,CSDN开发高手,CSDN技术社区</title><meta name="description" Content="CSDN:CSDN论坛,CSDN开发高手,CSDN技术社区"><meta name="keywords" content="CSDN:CSDN论坛,CSDN开发高手,CSDN技术社区"><link rel=stylesheet href='/img/csdn.css' type=text/css></head><body leftmargin="0" marginwidth="0" topmargin=0 leftmargin=0 bgcolor=#FFFFFF background='/img/bg2.gif'><a name='top'></a><center><script language=javascript src="/img/top.js?name=2004525563995927" ></script><TABLE cellSpacing=0 cellPadding=0 width=777 border=0><TBODY><TR><TD width=1 bgColor=#00659c></TD><TD align=middle width=775 bgColor=#ffffff><TABLE cellSpacing=0 cellPadding=0 width=775 border=0><TBODY><TR><TD align=middle><TABLE cellSpacing=0 cellPadding=0 width="96%" border=0><TBODY><TR><TD><br><div align="center"></div></TD></TR><TR><TD align=middle height=50><FONT class=red_3 size=3><B>在java中编程实现数字签名系统</B></FONT></TD></TR><TR><TD class=gray align=middle>&nbsp;&nbsp;&nbsp;浏览选项: <a href="javascript:;" onclick="javascript:do_zooms('font_word',16);">大</a><a href="javascript:;" onclick="javascript:do_zooms('font_word',14);">中</a><a href="javascript:;" onclick="javascript:do_zooms('font_word',12);">小</a>&nbsp;<SELECT onchange="if(this.options[this.selectedIndex].value!=''){do_color('font_word',this.options[this.selectedIndex].value);}" size=1 name=do_color_frm>  <OPTION value=""selected>颜色</OPTION> <OPTION style="COLOR: #000000" value=#000000>默认</OPTION> <OPTION style="COLOR: #808080"  value=#808080>灰度</OPTION> <OPTION style="COLOR: #808000"  value=#808000>橄榄色</OPTION> <OPTION style="COLOR: #008000"  value=#008000>绿色</OPTION> <OPTION style="COLOR: #0000ff"  value=#0000FF>蓝色</OPTION> <OPTION style="COLOR: #800000"  value=#800000>褐色</OPTION> <OPTION style="COLOR: #ff0000"  value=#FF0000>红色</OPTION></SELECT>&nbsp;&nbsp;&nbsp;</TD></TR><TR><TD height=10></TD></TR><TR><TD vAlign=top><TABLE cellSpacing=0 cellPadding=0 width="100%" border=0><TBODY><TR><TD width=22 background="/img/view_line.gif" height=1></TD><TD bgColor=#666666></TD><TD width=1 bgColor=#666666 rowSpan=5></TD></TR><TR><TD width=22 background="/img/view_b.gif" height=5></TD><TD></TD></TR><TR><TD background="/img/view_bg.gif"></TD><TD align=middle><TABLE class=tf width="98%" align=center border=0><TBODY><TR><TD class=bw width="100%"><FONT class=htd id=font_word style="FONT-SIZE: 14px; FONT-FAMILY: 宋体, Verdana, Arial, Helvetica, sans-serif">		<br><FONT color=#000000 face=arial,sans-serif size=-1 style="FONT-SIZE: 10.5pt">一个数字签名系统主要分为三个部分: <BR>1。生成密钥对 <BR>2。在数据发送端对数据进行签名 <BR>3。在数据接收端对数据进行校验数据签名 <BR>下面从这三个方面分别说明: <BR>1。生成密钥对 <BR>生成密钥对可用java提供的类KeyPairGenerator,用其中的getInstance方法创建KeypairGenerator对象,在用initialize进行初始化,最后用generateKeyPair生成密钥对,密钥对生成后,就可以将其写入文件中。通过网络或其他方式公告用户,用户接收到数据文件和签名文件后,就可以使用公约来校验数据文件的数字签名, <BR><BR>;判断数据在网络中的传输是否被非法修改。 <BR>////GenerateKeyPair.java///////////// <BR>import java.io.*; <BR>import java.security.*; <BR>public class GenerateKeyPair{ <BR>public static void main(String[] args){ <BR>boolean bHelp=false;//sign for show help. <BR>FileOutputStream fileOut;//输出密钥到文件 <BR>byte[] pubkey;//存储已编码的公钥字节 <BR>byte[] privKey;//存储已编码的私钥字节 <BR>if(args.length!=1){ <BR>System.out.println("Usage:GenerateKeyPair &lt;keyname&gt;; <BR>System.out.println("Option:"); <BR>System.out.println("&lt;keyname&gt;:The key name that using to genera <BR>te filename."); <BR>System.exit(0); <BR>} <BR>try{ <BR>System.out.println("Generating a key pair....."); <BR>KeyPairGenarator keyGen=KeyPairGenerator.getInstance("DSA");//使用DSA算法 <BR>KeyGen.initialize(1024,new SecureRandom()); <BR>KeyPair pair=keyGen.generateKeyPair(); <BR>PublicKey pub=pair.getPublic(); <BR>PrivateKey priv=pair.getPrivate(); <BR>pubkey=pub.getEncoded(); <BR>privateKey= priv.getEncoded(); <BR>fileOut=new FileOutputStream("PublicKey_"+args[0]); <BR>fileOut.write(pubKey); <BR>fileOut.close(); <BR>fileOut=new FileOutputStream("privateKey_"+args[0]): <BR>fileOut.write(privateKey); <BR>file.out.close(); <BR>System.out.println("OK!"); <BR>}catch(Exception e){ <BR>} <BR>} <BR>} <BR>} <BR><BR>2.生成数字签名 <BR>从私钥文件读取数据文件并将其转换为PrivateKey对象,可以使用KeyFactory类和PKCS8EncodeKeySpec类。KeyFactory可以利用给定的蜜月规范来建立不透明的密钥对象,也可以适当的格式取出蜜月对象中的密钥信息。 Signature是个引擎类,提供了诸如DSA或是RSA with MD5这样的数字签名算法。密 <BR>码学上安全的签名算法可接受任意大小的输入和一个私月,并产生一个比较短的(常常是固定大小的)前名字揭穿。并且,签名和公钥部反映有关私钥的任何内容。Signature对象即可用于数据签名,也可用于校验某个签名是否为预制关联的数据的真实签名。 <BR><BR>签名或教研签名的第一步是创建signature实例,为特定类型的签名算法或取signature对象的途径是调用signature德getInstance静态方法 <BR>初始化方法有两个,取决于Signature的用途: <BR>initSign(...)////用于签名 <BR>initVerify(.....)//用于校验 <BR>如果sigature初始化为签名,则可将带钱数据通过update方法提供给对象在调用sign来产生签名即可。 <BR>下面以一个实例来说明。 <BR>///////////////////SignData.java//////////////// <BR>import java.io.*; <BR>import java.security.*; <BR>import java.security.spec.*; <BR>public class SignData{ <BR>public static void main(String [] args) <BR>{ <BR>FileOutputStream fileOut; <BR>byte b; <BR>if(args.length!=3) <BR>{ <BR>System.out.println("Usage:SignData &lt;PrivateKey&gt; &lt;dataFile&gt; &lt;SignatureFile&gt;"); <BR>System.out.println("Option:"); <BR>System.out.println("&lt;PrivateKey&gt;:The file name of the private Key."); <BR>System.out.println("&lt;DataFile&gt;: The filename that want to signature."); <BR>System.out.println("&lt;signatureFile&gt;:the filename containing signture data."); <BR>} <BR>try{ <BR>System.out.println("Generating a digital signature...."); <BR>FileInputStream fileIn=new FileInputStream(args[0]); <BR>byte[] encodedprivateKey=new byte[fileIn.available()]; <BR><BR>finleIn.read(encodedprivateKey); <BR>fileIn.close(); <BR><BR>PKCS8EncodeKeySpec privKeySpec= <BR>new PKCS8EncodeKeySpec(encodedprivateKey); <BR>KeyFactory keyFactory=KeyFactory.getInstance("DSA"); <BR>PrivateKey privKey=keyFactory.generatePrivate(privateKeySpec); <BR>Signature dsa=Signature.getInstance("SHA/DSA"); <BR>dsa.initSign(privKey); <BR>FileInputStream fis=new FileInputStream(args[1]); <BR>while(fis.available()!=0){ <BR>b=(byte)fis.read(); <BR>dsa.update(b); <BR>} <BR>fis.close(); <BR>byte[] sig=dsa.sign(); <BR>fileOut=new FileOutputStream(args[2]); <BR>fileOut.write(sig); <BR>fileOut.close(); <BR>System.out.println("OK"); <BR>}catch(Exception e){ <BR>///////// <BR>} <BR>} <BR>} <BR>///////////////////////End of SignData.java////////////////// <BR>SignData.java从文津中读取已编码的私钥字节,利用PKCS8EncodeKeySpec对象将已编码的四月字节转换为PrivateKey对象,然后利用Signature签名数据文件,生成签名数据,并将签名数据写道文件中。 <BR><BR>//////VerifySign.java///////////// <BR>import java.io.*; <BR>import java.security.*; <BR>import java.security.spec.*; <BR>public class VerifySign{ <BR>public static void main(String [] args) <BR>{ <BR>if(args.length!=3){ <BR>System.out.println("Usage:VerifySign &lt;PublicKey&gt; &lt;dataFile&gt; &lt;SignatureFile&gt;"); <BR>System.out.println("Option:"); <BR>System.out.println("&lt;Public Key &gt;The filename of the public key."); <BR>System.out.println("&lt;DataFile&gt;The filename that want to signature"); <BR>System.out.println("&lt;SignatureFile&gt;:The file name containing signature data."); <BR>System.exit(0); <BR>} <BR>try{ <BR>FileInputStream fileIn=new FileInputStream(args[0]); <BR>byte[] encodedpubKey =new byte[fileIn.available()]; <BR>fileIn.read(encodedpubKey); <BR>fileIn.close(); <BR>X509EncodedKeySpec pubKeySpec= <BR>new X509EncodedKeySpec(encodedpubKey); <BR>KeyFactory keyFactory=KeyFactory.getInstance("DSA"); <BR>PublicKey pubKey=keyFactory.generatePublic(pubKeySpec); <BR>FileInputStream sigStream=new FileInputStream(args[2]); <BR>byte[] signature=new byte[sigStream.available()]; <BR>sigStream.read(signature); <BR>sigStream.close(); <BR>signature sigObj=Signature.getInstance("SHA1WithDSA"); <BR>sigObj.initVerify(pubKey); <BR>fileIn=new FileInputStream(args[1]); <BR>byte b; <BR>while(fileIn.available())!=0) <BR>{ <BR>b=(byte)fileIn.read(); <BR>sigObj.update(b); <BR>}; <BR>fileIn.close(); <BR>boolean verifies=sigObj.verify(signature); <BR>System.out.println("Signature verifies:"+verifies); <BR>}catch(Exception e){///////////// <BR>} <BR>} <BR>} </FONT><P>&nbsp;</P><br>	</FONT></TD></TR></TBODY></TABLE></TD></TR><TR><TD width=22 background="/img/view_b.gif" height=5></TD><TD></TD></TR><TR><TD background="/img/view_line.gif" height=1></TD><TD bgColor=#666666 height=1></TD></TR></TBODY></TABLE></TD></TR><TR><TD height=10></TD></TR><TR><TD>&nbsp; </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD><TD width=1 bgColor=#00659c></TD></TR></TBODY></TABLE><script language=javascript src="/img/bottom.js"></script></CENTER><NOSCRIPT><IFRAME SRC="*.html"></IFRAME></NOSCRIPT></body><script language=javascript src='/img/mouse.js'></script></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -