服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

rsa算法的实现方法――java版放送

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

 }

}

扫描关注微信公众号