1. 程式人生 > >RSA實現(java)

RSA實現(java)

input eas pos urn sca auto println str generated

import java.util.Scanner;

public class RsaEncry {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        long number = 100;//明文
        long n ;             //p*q;
        long[] theKey = new long[2];
        Scanner input = new Scanner(System.in);
        System.out.println(
"please input prime number p!"); long p = input.nextLong(); System.out.println("please input prime number q!"); long q = input.nextLong(); n = p*q; Key key = new Key(p,q,n); theKey = key.getKey(); System.out.println("e:"+theKey[0]+" d: "+theKey[1] + " l: "+(p-1)*(q-1)); doRsa test
= new doRsa(theKey[0],theKey[1],n); long answer = test.doEncry(number); System.out.println(number+"加密後為"+answer); long answer2 = test.doUnEncry(answer); System.out.println("解密後為"+answer2); } }
public class Key {
    long p,q,n,l,e,d=0,num=0;
    long[] e1 = new
long[1000]; long[] d1 = new long[50]; long[] theKey = new long[2]; public Key(long p, long q, long n) { // TODO Auto-generated constructor stub this.p = p; this.q = q; this.n = n; l = (p-1)*(q-1); e1[0] = 1; for(int j=1,i =4;i<l;i++ ){ //Math.gcb(); int flag =1; if(l%3!=0&&l>3){ e1[1] = 3; j++; } if(l%2!=0&&l>2){ e1[1] = 3; j++; } for(int x=2;x<=Math.sqrt(l)&&x<=Math.sqrt(i);x++){ if(l%i==0){ flag = 0; break; } if(l%x==0&&i%x==0){ flag = 0; break; } } if(flag==1){ e1[j] = i; num++; j++; } flag = 1; } e = e1[(int)(Math.random()*num)]; theKey[0] = e; for(int i = 1;i<2*e;i++) { if((i*l+1)%e==0) { d= (i*l+1)/e; } } theKey[1] = d; } public long[] getKey() { // TODO Auto-generated method stub return theKey; } }
public class doRsa {
    long  number;
    long e,d,n;
    //private long answer;
    public doRsa(long e,long d,long n)
    {
        this.e = e;
        this.d = d; 
        this.n = n;
        //number = num;
    }
    
    
    public long doEncry(long c)
    {
         // long a(c),long k(e),long M(n)  
        long answer=1;  
        while(e>=1){  
           if(e%2==1){  
               answer=c*answer%n;  
           }  
           c=(c%n)*(c%n)%n;  
           e/=2;  
        }  
        return  answer;
    }
    
    public long doUnEncry(long m)
    {
         // long a(c),long k(e),long M(n)  
        long answer=1;  
        while(d>=1){  
           if(d%2==1){  
               answer=m*answer%n;  
           }  
           m=(m%n)*(m%n)%n;  
           d/=2;  
        }  
        return  answer;
    }
}

RSA實現(java)