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

📄 rsadata.java

📁 RSA算法实现
💻 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 + -