频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

RSA算法的实现方法——Java版放送

来源:天极Yesky软件频道 作者: 出处:巧巧读书 2007-05-23 进入讨论组

  一开始不知道有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);

 }

}

URL:http://www.qqread.com/java/2007/05/e313713.html 更多文章 更多内容请看Java环境安装配置Java编程开发手册Java的类专题,或进入讨论组讨论。
更多专题 【深 度 阅 读】 相 关 文 章
    收藏此文】【 】【打印】【关闭
    相关图文阅读
    频道图文推荐
    健 康 咨 询
    时 尚 咨 询
    巧巧读书宗旨
    相关专题
    讨论组问题推荐
    站内各频道最新更新文档
    站内最新制作专题
    热门关键字导读
    Photoshop教 程照片处理 照片制作 PS快捷键 抠图
    计 算 机 故 障XP系统修复
    艺 术 与 设 计设计 流媒体 设计欣赏 边框
    计 算 机 安 全ARP
    站内频道文章精选
    巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章