Java语言中RSA算法的实现

    作者:课课家教育更新于: 2016-02-29 11:38:35

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

      

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

      }

      }

课课家教育

未登录