📄 rsa.java
字号:
package DES_RSA;
public class RSA{
//存放素数
int prime[]=new int[1305];
//用筛选法求素数
int p[]=new int[10005];
//A用户的公,私钥
private static long aN,aE,aD;
//B用户的公,私钥
private static long bN,bE,bD;
//C用户的公,私钥
private static long cN,cE,cD;
public void PRIME(){
int i,i2,k;
for(i=0;i<=10000;i+=2)
p[i]=0;
for(i=1;i<=10000;i+=2)
p[i]=1;
p[2]=1;p[1]=0;
for(i=3;i<=100;i+=2)
{
if(p[i]==1)
{
i2=i+i;
k=i2+i;
while(k<=10000)
{
p[k]=0;
k+=i2;
}
}
}
prime[0]=1;
prime[1]=2;
for(i=3;i<=10000;i+=2)
if(p[i]!=0)
prime[++prime[0]]=i;
}
//求两个数的最大公约数
public long GCD(long n,long m)
{
long t,r;
if(n<m)
{
t=n;
n=m;
m=t;
}
while((r=n%m)!=0)
{
n=m;
m=r;
}
return m;
}
//x=a^b(mod n)
public long ModPow(long a,long b,long n)
{
long i,ans=a;
ans%=n;
for(i=2;i<=b;i++)
{
ans*=a;
ans%=n;
}
return ans%n;
}
public void RandA()
{
int a,b;
long i,eula;
a=7+(int)(Math.random()*5);
b=a+1;
PRIME();
aN=prime[a]*prime[b];
eula=(prime[a]-1)*(prime[b]-1);
//找一个与eula互质的数
for(i=2;i<eula;i++)
if(GCD(eula,i)==1)
{
aE=i;
break;
}
//上面找到了公开密钥n--e
//d=Inv(e,eula);
//下面找到了私密密钥n--d
for(i=1;i<=eula-1;i++)
if(i*aE%eula==1)
{
aD=i;
break;
}
}
public void RandB()
{
int a,b;
long i,eula;
a=7+(int)(Math.random()*5);
b=a+2;
PRIME();
bN=prime[a]*prime[b];
eula=(prime[a]-1)*(prime[b]-1);
//找一个与eula互质的数
for(i=2;i<eula;i++)
if(GCD(eula,i)==1)
{
bE=i;
break;
}
//上面找到了公开密钥n--e
//d=Inv(e,eula);
//下面找到了私密密钥n--d
for(i=1;i<=eula-1;i++)
if(i*bE%eula==1)
{
bD=i;
break;
}
}
public void RandC()
{
int a,b;
long i,eula;
a=7+(int)(Math.random()*5);
b=a+3;
PRIME();
cN=prime[a]*prime[b];
eula=(prime[a]-1)*(prime[b]-1);
//找一个与eula互质的数
for(i=2;i<eula;i++)
if(GCD(eula,i)==1)
{
cE=i;
break;
}
//上面找到了公开密钥n--e
//d=Inv(e,eula);
//下面找到了私密密钥n--d
for(i=1;i<=eula-1;i++)
if(i*cE%eula==1)
{
cD=i;
break;
}
}
public long reAn()
{
return aN;
}
public long reBn()
{
return bN;
}
public long reCn()
{
return cN;
}
public long reAe()
{
return aE;
}
public long reBe()
{
return bE;
}
public long reCe()
{
return cE;
}
public long reAd()
{
return aD;
}
public long reBd()
{
return bD;
}
public long reCd()
{
return cD;
}
//这个函数就是算2重加密或者是2重解密!
public String Algorithm(String s,long an,long ae,long bn,long be){
int i;
long num;
long f[]=new long[200005];
String str="";
for(i=0;i<s.length();i++)
{
num=(long)s.charAt(i);
f[i]=ModPow(num,ae,an);
}
for(i=0;i<s.length();i++)
str+=(char)ModPow(f[i],be,bn);
return str;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -