下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Java语言中RSA算法的实现

作者:课课家教育     来源: http://www.kokojia.com点击数:954发布时间: 2016-02-29 11:39:26

标签: Java语言Java设计Java编程

大神带你学编程,欢迎选课

  

Java语言中RSA算法的实现_Java语言_Java设计_课课家

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

  }

  }

赞(20)
踩(1)
分享到:
华为认证网络工程师 HCIE直播课视频教程