任何获得matrix授权的网站,转载请保留以下作者信息和链接:
作者:cas(作者的blog:http://blog.matrix.org.cn/page/cas)
rsa简介
rsa协议我不再描述,大家可以看http://www.di-mgt.com.au/rsa_alg.html。
rsa的密钥对生成时间依赖于两个因素,
第一,密钥的长度
第二,素数的筛选质量
在整个密钥对生成过程中,rsa会随机选择两个大素数,事实上,计算机的聪明程度还不足以判断某个随机选择的大素数是否真的不可分解,因此,你只能够通过计算机程序来尽量将这个大随机数不是素数的几率降到某个界限值(如0.0001)以下。
rsa keypair分为公钥和私钥,你应该这样使用keypair:
1,你使用私钥来签名,别人用你的公钥来验证签名
2,别人用你的公钥加密信息m->m',你用私钥来解密信息m'->m
注意的地方
虽然rsa经受过多年深入的密码分析,但大家在使用rsa的时候还是要注意以下事项,
否则rsa的安全性会大打折扣:
1,合理的密钥长度(setkeylength)
rsa1024至今是安全的,按照目前密码分析和计算机硬件条件的发展,估计在未来5-10年,仍以难以破解。
2,素数确定性选择(setcertaintyofprime)
实际应用中,选择100就行了。
3,选择合理的padding(setrsamode)
rsa有三种模式,raw, pkcs和oaep,日常应用中,我本人只使用pkcs(pkcs#1 v1.5)
和oaep(pkcs#1 v2.0)这两种padding模式。
padding跟安全性其实是紧密挂钩的,有兴趣的朋友可以看看pkcs#1标准讨论。
案例
我编写了一个rsautils的工具类,下面的该类的测试代码的一部分。
程序如下:
rsautils utils =new rsautils();
utils.setkeylength(1024);
utils.setcertaintyofprime(100);
utils.setrsamode(pkcs_rsa_mode); //raw =1 pkcs=2 oaep=3
utils.initrsakeypair();
//查看公钥
rsakeyparameters mypubkey=utils.getpublickey();
biginteger mypubkey_modulus=mypubkey.getmodulus();
biginteger mypubkey_exponent=mypubkey.getexponent();
system.out.println("##mypubkey的modulus长度="+mypubkey_modulus.bitlength());
system.out.println("##mypubkey_modulus值="+mypubkey_modulus.tostring());
system.out.println("##mypubkey的exponent长度="+mypubkey.getexponent().bitlength());
system.out.println("##mypubkey_exponent值="+mypubkey_exponent.tostring());
//查看私钥
rsakeyparameters myprivkey=utils.getprivatekey();
biginteger myprivkey_modulus=myprivkey.getmodulus();
system.out.println("##myprivkey的modulus长度="+myprivkey_modulus.bitlength());
system.out.println("##myprivkey的modulus值="+myprivkey_modulus.tostring());
system.out.println("##myprivkey.getexponent()长度="+myprivkey.getexponent().bitlength());
system.out.println("##myprivkey.getexponent()值="+myprivkey.getexponent());
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器