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

📄 usestring.java

📁 RSA的java源代码
💻 JAVA
字号:
import java.*;
import java.io.*;

class Prime{//得到p,q
    static long[] prime(){
        int j,n2,n4,n6;
		int a=0;
		int b=0;
		double n1,n3,n5;
		long p,q,n,n_change;
		boolean primeFlag;
		long []prime1=new long[1000]; 
		boolean Flag=false;
		long []returnprime=new long [4];
	    
	    for(int i=2;i<1000;i++){
			j=2;
			primeFlag=true;
			do{
				if((i%j==0)&(i!=2)) primeFlag=false;
				j++;
				
			}while((j<=i/2)&(primeFlag==true));
			if(primeFlag==true) {prime1[a]=i;
			                        a++;}
			                        
			}
			long [] prime=new long[a];
	    System.arraycopy(prime1,0,prime,0,a);
	    do{
        Flag=false;
		n1=Math.random()*a;
		n2=(int)Math.floor(n1);
		p=prime[n2];
		
		n3=Math.random()*a;
		n4=(int)Math.floor(n3);
		q=prime[n4];
		if(p==q) {Flag=true;}
		}while (Flag==true);//检查p和q的值是否相等,若相等则重新取值
		n=p*q;
		n_change=(p-1)*(q-1);
		returnprime[0]=p;
		returnprime[1]=q;
		returnprime[2]=n;
		returnprime[3]=n_change;
		return returnprime;
                       }
              }
 
 
class Produce_e {//产生e的值
	static long produce_e (long n_change){
	    long e;
	    e=(long)Math.floor(n_change*Math.random());
	    for(long i=2;i<e;i++){
	   	if((e%i==0) & (n_change%i==0)) {
	   		 e=(long)Math.floor(n_change*Math.random());
	   		 i=1;
	   	                                } 
	   	if(e==1){
	   	 e=(long)Math.floor(n_change*Math.random());
	   		 i=1;
	                                     }
	    if(e==0){
	   	 e=(long)Math.floor(n_change*Math.random());
	   		 i=1;
	                                    }
	               }
	   return e;
          	} 
	
  }	
	
class Produce_d {//产生d的值
	static long produce_d (long e,long n_change){
		long d;
		int i;
		for( i=0;i<n_change;i++){
			if(e*i%n_change==1) break;
		}
		d=i;
		return d;
		}
		}
	
class UseString {//若要求是对文本文件进行加密时的加密和解密程序
		static long [] coden (long [] mingwen ,long e,long n){
		      int length_mingwen=mingwen.length;
		      long [] secret=new long [length_mingwen];
		      for(int j=0;j<length_mingwen;j++){
		      secret[j]=1;
		      for(int i=0;i<e;i++){
		      secret[j]=secret[j]*mingwen[j]%n;
	                              }	
		                              } return secret;
		                }
	
	    static long [] decoden (long [] secret ,long d,long n){
		      int length_secret=secret.length;
		      long [] returnback=new long [length_secret];
		      for(int j=0;j<length_secret;j++){
		      returnback[j]=1;
		      for(int i=0;i<d;i++){
	          returnback[j]=returnback[j]*secret[j]%n;
                    }	
		        } return returnback;
		      }
	
         public static void main(String [] args) throws IOException{
 	          long p,q,n,n_change,e,d;
 	          long [] receive=new long [4];
 	          DataInputStream in=new DataInputStream(new FileInputStream("mingwen.in"));
 		      String mingwen_1=in.readLine();
 		      byte [] mingwen_2=mingwen_1.getBytes();
              long [] mingwen=new long [mingwen_2.length];
 		      for(int i=0;i<mingwen_2.length;i++){
 			  mingwen[i]=(long)mingwen_2[i];
 		        }
 		      in.close();
 	          long [] secret=new long [7];
 	          long [] returnback=new long [7];
 	          //计算出n,n_change,e,d,p,q
 	          Prime a=new Prime();
 	          Produce_e b=new Produce_e();
 	          Produce_d c=new Produce_d();
              receive=a.prime();
 	          p=receive[0];
 	          q=receive[1];
 	          n=receive[2];
 	          n_change=receive[3];
 	          e=b.produce_e(n_change);
 	          d=c.produce_d(e,n_change);
 	          //加密,解密
              secret=coden(mingwen,e,n);
 	          returnback=decoden(secret,d,n);
 	          //将解密以后的文件再变成字符串
              byte [] returnback_1=new byte [returnback.length];
              for(int i=0;i<returnback.length;i++){
 			      returnback_1[i]=(byte)returnback[i];
 		        }
              String returnback_2=new String(returnback_1); 
 	          //输出
 	          System.out.println("p="+p+" "+"q="+q+" "+"n="+n+" "+"n_change="+n_change+" "+"e="+e+" "+"d="+d);
 	          System.out.println("明文是");
 	          System.out.println(mingwen_1);
 	          System.out.println();
 	          System.out.println("密文是");
 	          for(int i=0;i<mingwen.length;i++){
 	          System.out.print(secret[i]+" ");
 	            }
 	          System.out.println();
 	          System.out.println("解密以后的文件是");
 	          System.out.print(returnback_2);
 	
 }
}
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -