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


作者:无风浪 | 来源:Examlink | 日期:08-10 | 字体: [ ]

本文简介:一开始不知道有BigInteger这个大数类,居然自己去实现了一个,写了大数加法后,才发现有现成的T_T

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

 }

}




用户名: 新注册) 密码: 匿名评论 [所有评论]

评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 计算机二级JAVA语言 二级JAVA语言辅导 二级JAVA编写
如果你觉得一篇文章有用,你可以在每篇后面参与评论,或者查看其他人的评论,请保证你的评论对大家友好。
点这里评论
或者您可以来资源论坛参与讨论,一切都是免费的,不过可能需要麻烦您注册一下。
点这里讨论
把你的文章登陆在这里,让大家来分享你的文章。请立即登陆发表!
点这里投稿