📄 java加密和数字签名编程快速入门 2.htm
字号:
<TABLE cellSpacing=0 cellPadding=0 width=776 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#b9bebe></TD>
<TD align=middle width=774 bgColor=#eff8ff height=100><IFRAME
src="Java加密和数字签名编程快速入门 2.files/;pl=pl-15-etime-all;tp=if;sk=0;ck=0;.htm"
frameBorder=0 width=760 scrolling=no height=90></IFRAME></TD>
<TD width=1 bgColor=#b9bebe></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=776 border=0>
<TBODY>
<TR>
<TD bgColor=#b9bebe height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=776 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#b9bebe rowSpan=13></TD>
<TD vAlign=top width=603 bgColor=#f0f2fb>
<TABLE cellSpacing=0 cellPadding=0 width=603 border=0>
<TBODY>
<TR>
<TD width=10></TD>
<TD width=55>您的位置:</TD>
<TD width=538><A
href="http://www.yesky.com/SoftChannel/72339069014638592/index.shtml">软件</A>
> <A
href="http://www.yesky.com/SoftChannel/72342367549521920/index.shtml">开发者网络</A>
> <A
href="http://www.yesky.com/SoftChannel/72342371844489216/index.shtml">开发工具</A>
> <A
href="http://www.yesky.com/SoftChannel/72342371961929728/index.shtml">Java</A>
> 正文</TD></TR>
<TR></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=603 border=0>
<TBODY>
<TR>
<TD bgColor=#dee2f5 height=40>
<TABLE height=40 cellSpacing=0 cellPadding=0 width=590 align=center
border=0>
<TBODY>
<TR>
<TD align=middle><FONT
class=f22><B>Java加密和数字签名编程快速入门</B></FONT></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD background="Java加密和数字签名编程快速入门 2.files/newhard-040906_c_1.gif"
height=1></TD></TR>
<TR>
<TD vAlign=top height=5></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=603 border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle width=373 rowSpan=9>
<TABLE cellSpacing=0 cellPadding=0 width=373 align=center
border=0>
<TBODY>
<TR>
<TD align=middle><SPAN id=pip></SPAN></TD></TR>
<TR>
<TD align=middle><IFRAME
src="Java加密和数字签名编程快速入门 2.files/y-soft-column-1.htm"
frameBorder=0 width=360 scrolling=no
height=50></IFRAME></TD></TR></TBODY></TABLE></TD>
<TD width=5></TD>
<TD vAlign=top width=220>
<TABLE cellSpacing=0 cellPadding=0 width=220 border=0>
<TBODY>
<TR>
<TD colSpan=2><FONT class=f21><B>[文章信息]</B></FONT></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR>
<TR>
<TD vAlign=top width=62>作者:</TD>
<TD vAlign=top width=158><FONT
color=#0e3e92>jwsh1984</FONT></TD></TR>
<TR>
<TD vAlign=top>时间:</TD>
<TD vAlign=top><FONT
color=#0e3e92>2005-02-17</FONT></TD></TR>
<TR>
<TD vAlign=top>出处:</TD>
<TD vAlign=top><FONT color=#0e3e92>blog</FONT></TD></TR>
<TR>
<TD vAlign=top>责任编辑:</TD>
<TD vAlign=top><FONT color=#0e3e92>方舟</FONT></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=220 border=0>
<TBODY>
<TR>
<TD colSpan=2><FONT class=f21><B>[文章导读]</B></FONT></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR>
<TR>
<TD vAlign=top colSpan=2><SPAN
class=f14>本文主要谈一下密码学中的加密和数字签名,以及其在java中如何进行使用</SPAN></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR></TBODY></TABLE>
<SCRIPT
language=JavaScript><!--var ad_id=1003//--></SCRIPT>
<SCRIPT language=JavaScript
src="Java加密和数字签名编程快速入门 2.files/10.js"></SCRIPT>
</TD>
<TD width=5></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
<TD width=1 bgColor=#b9bebe rowSpan=13></TD>
<TD vAlign=top align=middle width=170 bgColor=#ffffff rowSpan=13>
<TABLE cellSpacing=5 cellPadding=0 width=165 border=0>
<TBODY>
<TR>
<TD align=middle>
<SCRIPT language=JavaScript><!--var ad_id=0403//--></SCRIPT>
<SCRIPT language=JavaScript
src="Java加密和数字签名编程快速入门 2.files/04.js"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE height=28 cellSpacing=0 cellPadding=0 width=160
background="Java加密和数字签名编程快速入门 2.files/2004-30.gif" border=0>
<TBODY>
<TR>
<TD align=middle><B>advertisement</B></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#adadad></TD>
<TD align=middle bgColor=#ffffff><SPAN id=sv></SPAN></TD>
<TD width=1 bgColor=#adadad></TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width=160 bgColor=#adadad
border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE height=10 cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE height=28 cellSpacing=0 cellPadding=0 width=160
background="Java加密和数字签名编程快速入门 2.files/2004-30.gif" border=0>
<TBODY>
<TR>
<TD align=middle><B>热点推荐</B></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#adadad></TD>
<TD align=middle bgColor=#ffffff>
<TABLE cellSpacing=0 cellPadding=2 width=150 border=0>
<TBODY>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72342371928637440/20050217/1911703.shtml"
target=_blank>在VB6中用命令行为模式控制GUI动作</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72357786515668992/20050216/1911308.shtml"
target=_blank>Excel图表向导详解</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72356699922497536/20041123/1878990.shtml"
target=_blank>浅析各种计算机病毒应对方法</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72339069014638592/20050216/1911585.shtml"
target=_blank>2月16日软件精选 春节文章精彩回顾</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72348968914255872/20050216/1911545.shtml"
target=_blank>轻松玩转Excel数据图表</A></TD></TR></TBODY></TABLE></TD>
<TD width=1 bgColor=#adadad></TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width=160 bgColor=#adadad
border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD>
<TD width=1 bgColor=#b9bebe rowSpan=13></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb height=5></TD></TR>
<TR>
<TD vAlign=top background="Java加密和数字签名编程快速入门 2.files/newhard-040906_c_1.gif"
bgColor=#f0f2fb height=1></TD></TR>
<TR>
<TD vAlign=top bgColor=#dee2f5>
<TABLE height=25 cellSpacing=0 cellPadding=0 width=590 align=center
border=0>
<TBODY>
<TR>
<TD width=90><FONT class=f21><B>[正文]</B></FONT></TD>
<TD align=right width=480>
<P align=right><FONT color=red><A
href="http://www.yesky.com/SoftChannel/72342371961929728/20050217/1911753.shtml">上一页</A> <A
href="http://www.yesky.com/SoftChannel/72342371961929728/20050217/1911753.shtml">1</A>
2 <A
href="http://www.yesky.com/SoftChannel/72342371961929728/20050217/1911753_2.shtml">3</A>
<A
href="http://www.yesky.com/SoftChannel/72342371961929728/20050217/1911753_2.shtml">下一页</A></FONT></P></TD>
<TD align=middle width=20></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=top background="Java加密和数字签名编程快速入门 2.files/newhard-040906_c_1.gif"
bgColor=#f0f2fb height=1></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb height=10></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb>
<TABLE cellSpacing=0 cellPadding=0 width=590 align=center border=0>
<TBODY>
<TR>
<TD><SPAN
class=f14> 4)数字签名:<BR><BR> 数字签名,它是确定交换消息的通信方身份的第一个级别。上面A通过使用公钥加密数据后发给B,B利用私钥解密就得到了需要的数据,问题来了,由于都是使用公钥加密,那么如何检验是A发过来的消息呢?上面也提到了一点,私钥是唯一的,那么A就可以利用A自己的私钥进行加密,然后B再利用A的公钥来解密,就可以了;数字签名的原理就基于此,而通常为了证明发送数据的真实性,通过利用消息摘要获得简短的消息内容,然后再利用私钥进行加密散列数据和消息一起发送。java中为数字签名提供了良好的支持,java.security.Signature类提供了消息签名:<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf
border=1>
<TBODY>
<TR>
<TD>/**<BR>*DigitalSignature2Example.java<BR>*Copyright
2005-2-16<BR>*/<BR>import java.security.Signature;<BR>import
java.security.KeyPairGenerator;<BR>import
java.security.KeyPair;<BR>import
java.security.SignatureException;<BR><BR>/**<BR>*数字签名,使用RSA私钥对对消息摘要签名,然后使用公鈅验证
测试<BR>*/<BR>public class DigitalSignature2Example{<BR> public
static void main(String[] args) throws
Exception{<BR> if(args.length!=1){<BR> System.err.println("Usage:java
DigitalSignature2Example
<text>");<BR> System.exit(1);<BR> }<BR><BR> byte[]
plainText=args[0].getBytes("UTF8");<BR> //形成RSA公钥对<BR> System.out.println("\nStart
generating RSA key");<BR> KeyPairGenerator
keyGen=KeyPairGenerator.getInstance("RSA");<BR> keyGen.initialize(1024);<BR><BR> KeyPair
key=keyGen.generateKeyPair();<BR> System.out.println("Finish
generating RSA key");<BR> //使用私鈅签名<BR> Signature
sig=Signature.getInstance("SHA1WithRSA");<BR> sig.initSign(key.getPrivate());<BR> sig.update(plainText);<BR> byte[]
signature=sig.sign();<BR> System.out.println(sig.getProvider().getInfo());<BR> System.out.println("\nSignature:");<BR> System.out.println(new
String(signature,"UTF8"));<BR><BR> //使用公鈅验证<BR> System.out.println("\nStart
signature
verification");<BR> sig.initVerify(key.getPublic());<BR> sig.update(plainText);<BR> try{<BR> if(sig.verify(signature)){<BR> System.out.println("Signature
verified");<BR> }else System.out.println("Signature
failed");<BR> }catch(SignatureException
e){<BR> System.out.println("Signature
failed");<BR> }<BR> }<BR>}</TD></TR></TBODY></TABLE><BR> 5)数字证书。<BR><BR> 还有个问题,就是公钥问题,A用私钥加密了,那么B接受到消息后,用A提供的公钥解密;那么现在有个讨厌的C,他把消息拦截了,然后用自己的私钥加密,同时把自己的公钥发给B,并告诉B,那是A的公钥,结果....,这时候就需要一个中间机构出来说话了(相信权威,我是正确的),就出现了Certificate
Authority(也即CA),有名的CA机构有Verisign等,目前数字认证的工业标准是:CCITT的X.509:<BR>数字证书:它将一个身份标识连同公钥一起进行封装,并由称为认证中心或
CA
的第三方进行数字签名。<BR><BR> 密钥库:java平台为你提供了密钥库,用作密钥和证书的资源库。从物理上讲,密钥库是缺省名称为
.keystore
的文件(有一个选项使它成为加密文件)。密钥和证书可以拥有名称(称为别名),每个别名都由唯一的密码保护。密钥库本身也受密码保护;您可以选择让每个别名密码与主密钥库密码匹配。
<BR><BR> 使用工具keytool,我们来做一件自我认证的事情吧(相信我的认证):<BR><BR> 1、创建密钥库keytool
-genkey -v -alias feiUserKey -keyalg RSA
默认在自己的home目录下(windows系统是c:\documents and settings\<你的用户名>
目录下的.keystore文件),创建我们用 RSA 算法生成别名为 feiUserKey 的自签名的证书,如果使用了-keystore
mm 就在当前目录下创建一个密钥库mm文件来保存密钥和证书。<BR><BR> 2、查看证书:keytool -list
列举了密钥库的所有的证书 <BR><BR> 也可以在dos下输入keytool
-help查看帮助。<BR><BR></SPAN><BR></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb height=10></TD></TR>
<TR>
<TD vAlign=top background="Java加密和数字签名编程快速入门 2.files/newhard-040906_c_1.gif"
bgColor=#f0f2fb height=1></TD></TR>
<TR>
<TD vAlign=top bgColor=#dee2f5>
<TABLE height=25 cellSpacing=0 cellPadding=0 width=590 align=center
border=0>
<TBODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -