📄 rsadata.java
字号:
public class RsaData
{
private long p, q, n, qn, e, d;//p和q分别为两个大素数,e为加密密钥,d为解密密钥
//n=P*q, qn=(p-1)*(q-1);
public RsaData()
{
p = 4;
q = 4;
p = setNumber( p );
q = setNumber( q );
n = p * q;
qn = (p-1)*(q-1);
e = setE(qn);
d = setD(qn,e);
}
//判断是否是素数
private boolean isPrimeNumber(long number)
{
for( int i = 2; i <= Math.sqrt(number); i++ )
{
if( number%i == 0 )
return false;
}
return true;
}
//设置数,为p和q随即赋值两个大素数
private long setNumber(long number)
{
while( !isPrimeNumber( number ) )
{
number = (long)(Math.random()*100);//将100变得足够大,改变long为Bigteger
}
return number;
}
//判断两个数是不是互素
private boolean prime_prime( long prime1, long prime2 )
{
long littleNumber = (prime1 < prime2) ? prime1:prime2;
for( int i = 2; i <= littleNumber; i++ )
{
if( prime1%i == 0 && prime2%i == 0 )
return false;
}
return true;
}
//给e赋值
private long setE( long t )
{
long e = 0;
while( true )
{
e = (long)(Math.random()*100);
if( e < t && prime_prime(e,t) )
return e;
}
}
//给d赋值
private long setD( long t,long e )
{
long t0 = 0,t1 = 1,t2 = -1;
long r0 = t, 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()//返回e
{
return e;
}
public long getD()//返回d
{
return d;
}
public long getN()//返回n
{
return n;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -