捷凌网安JAVA频道
捷凌IT教育
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME 开源技术 其他技术 论坛
 您现在的位置: 捷凌网安 >> Java >> 其他技术 >> 正文
RSA算法的实现——java版

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-3-26 0:53:38

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);


 }

}

  • 上一篇文章: 没有了

  • 下一篇文章:
  •  
     最进更新
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11
     
     推荐文章
    推荐文章Java技术开源搜索引擎04-30
    推荐文章Eclipse中建立自己的JUnit测04-30
    推荐文章Eclipse 3.3上安装jadclipse04-30
    推荐文章spring 编程入门十大问题解答04-30
    推荐文章Java编程中Spring的一些负面04-30
    推荐文章Java应用中Hibernate对多表关04-30
    推荐文章关于hibernate的缓存和CRUD04-30
    推荐文章基于Struts1.2的动态多文件上04-30
    推荐文章演示Struts2实现简单上传代码04-30
    推荐文章J2EE学习笔记--Struts初步认04-30
     
     热点文章
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号