只进行简单的数字加密就行。前面的代码写完了,公钥密钥都可以随机产生了,只是在解密的时候可能超过了long类型数字能表示的最大值,还原不出来加密前的数据了,应该是用BigInteger来解决,写不出来了,谁帮帮忙改下
import java.math.*;public class PrimeNum {
long p,q,t,n,e,d;

public static void main(String[] args) {
PrimeNum p = new PrimeNum();
p.Random();
p.privateKey();

}

public boolean Prime(long i){
boolean w = true;
for (int j = 2 ; j<(i/2+1) ;j++) {
if (i%j == 0) {
w = false;
}
}
return w;
} public void Random() {
do { 
p = ((long)(Math.random()*10))+15; 
}
while(!this.Prime(p));
System.out.println("选择的第一个素数是:"+p);
do {
q = ((long)(Math.random()*10))+20;
}
while (!this.Prime(q));
System.out.println("选择的第二个素数是:"+q);
long n = p*q;
t = (p-1)*(q-1);
do { 
e = ((long)(Math.random()*10))+10;
}
while(!this.Prime(e));
//System.out.println(e);
System.out.println("n的值是:"+n+" "+"e的值是:"+e);
} public void privateKey() {
for(d=1 ;;d++) {
if(((d*e)-1)%t == 0){
System.out.println("d的值是"+d);
break;
}
}
} public void achieveRsa(long i) {
System.out.println("加密前的数据是:"+i);
long aa = (long)Math.pow(i,e);
//System.out.print(aa);
long c = aa%(p*q);
System.out.println("加密后的数据是:"+c);
long aaa = ((long)Math.pow(c, d)%(p*q));
System.out.println("解密后的数据是:"+aaa);
}
}