⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsa.java

📁 DES的加密! DES的加密! DES的加密! DES的加密! DES的加密! DES的加密! DES的加密! DES的加密! DES的加密! DES的加密! DES的加密! D
💻 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 + -