网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  rsa算法的实现方法——java版放送     
  文章作者:未知  文章来源:水木森林  
  查看:110次  录入:管理员--2007-11-17  
 

  一开始不知道有biginteger这个大数类,居然自己去实现了一个,写了大数加法后,才发现有现成的t_t

以下是引用片段:
package rsa;
import java.math.biginteger;

public class rsa {
 private long p,q,e,d,n;
 public rsa(){
  int pindex = (int)(math.random()*10);
  int qindex;
  int eindex;
  do{
   qindex = (int)(math.random()*10);
  }
  while(qindex==pindex);
  do{
   eindex = (int)(math.random()*10);
  }
  while(eindex==pindex||eindex==pindex);
  p = 1033;
  q = 2017;
  e = 29437;
  n = p*q;
  d = calculated();
 }
 private long calculated(){
  long t0 = 0,t1 = 1,t2 = -1;
  long r0 = (p-1)*(q-1), m = r0,r1 = e ,r2 = -1;
  do{
   long q = r0/r1;
   r2 = r0-r1*q;
   if(r2==0)break;
   t2 = t0 - t1*q;
   while(t2<0){
    t2+=m;
   }
   if(t2>=m){
    t2 %= m;
   }    
   r0 = r1;
   r1 = r2;
   t0 = t1;
   t1 = t2;
  }while(r2!=0);
  if(r1!=1){
   return 0;
  }
  else{
   return t2;
  }
 }
 
 public long gete() {
  return e;
 }
 public long getn() {
  return n;
 }
 public long getd() {
  return d;
 }
 public biginteger encode(biginteger data){
  return pow(data,d).mod(new biginteger(n+""));
 }
 public biginteger decode(biginteger code){
  return pow(code,e).mod(new biginteger(n+""));
 }
 public biginteger pow(biginteger data,long p){
  data = data.pow((int)p);
  return data;
 }
 public static void main(string args[]){
  rsa rsa = new rsa();
  
  biginteger data = new biginteger("222222");
  long oldtime = system.currenttimemillis();
  biginteger code = rsa.encode(data);
  long newtime = system.currenttimemillis();
  double codetime = ((double)(newtime-oldtime))/1000;
  oldtime = system.currenttimemillis();
  biginteger decode = rsa.decode(code);
  newtime = system.currenttimemillis();
  double decodetime = ((double)(newtime-oldtime))/1000;
  system.out.println("privatekey:"+rsa.d);
  system.out.println("publickkey:"+rsa.e);
  system.out.println("n:"+rsa.n);
  system.out.println("data:"+data);
  system.out.println("code:"+code+" time:"+codetime);
  system.out.println("decode:"+decode+" time:"+decodetime);

 }

}

 
 
上一篇: j2se5.0新特性之windows下读取网卡物理地址    下一篇: java中文件操作大全
  相关文档
关于 j2ee 层次设计架构实例的分析详解 01-31
think in java 3rd 中文版3 11-17
中间件--apache和tomcat的集群配置 01-30
hibernate的事务和并发 11-17
jbuilder开发技巧 11-17
jvm 11-16
ubuntu 上利用 subclipse 访问 svn 11-17
weblogic81的服务配置 11-17
jini技术基础结构 11-16
ignorecase 属性 11-16
介绍一些 java nio 的学习文章,以方便各位的学习! 11-17
eclipse 3.0 上配置jsp开发环境全攻略 11-16
java中“异常机制”深入研究 11-17
j2se 5.0新特性之static import 11-17
use itext to create a html 11-17
java高级--如何掌握jdk1.5的枚举类型 11-16
平台非依赖性建议及使用抽象隔离变化 08-06
漫谈java数据库存取技术 11-16
从outlook导入email地址 11-17
myeclipse 4.1 正式发布 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息