📄 usestring.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 + -