一开始不知道有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); } } |
闽公网安备 35060202000074号