今天帮同学看错误,他实现了个加密算法没怎么仔细看
import java.security.SecureRandom;
import java.math.BigInteger;
public class CRSA{
private final static SecureRandom random=new SecureRandom();
private BigInteger SK;
private BigInteger PK;
private BigInteger npq;
CRSA(int N){
SecureRandom md=new SecureRandom();
BigInteger p=new BigInteger(N/2,200,md);
BigInteger q=new BigInteger(N/2,200,md);
BigInteger f=(p.subtract(new BigInteger("1")).multiply(q.subtract(new BigInteger("1"))));
npq=p.multiply(q);
PK=new BigInteger("655337");
SK=PK.modInverse(f);
}
BigInteger encrypt(BigInteger message){
return message.modPow(PK,npq);
}
BigInteger decrypt(BigInteger encrypted){
return encrypted.modPow(SK,npq);
}
public String output(){
String str="";
str=str+"/n公钥:"+PK+"/n";
str=str+"/n私钥:"+SK+"/n";
return str;
}
public static void main(String[]a){
int N;
byte length[]=new byte[10];
System.out.print("input N:");
try{
System.in.read(length);
}
catch(Exception e){}
String str=new String(length);
N=Integer.parseInt(str.trim());
CRSA key=new CRSA(N);
BigInteger message=new BigInteger(N-1,random);
BigInteger encrypt=key.encrypt(message);
BigInteger decrypt=key.decrypt(encrypt);
System.out.println(key.output());
System.out.println("the source info:"+message+"/n");
System.out.println("the encrypted info:"+encrypt+"/n");
System.out.println("the decrypted info:"+decrypt+"/n");
}
}
import java.security.SecureRandom;
import java.math.BigInteger;
public class CRSA{
private final static SecureRandom random=new SecureRandom();
private BigInteger SK;
private BigInteger PK;
private BigInteger npq;
CRSA(int N){
SecureRandom md=new SecureRandom();
BigInteger p=new BigInteger(N/2,200,md);
BigInteger q=new BigInteger(N/2,200,md);
BigInteger f=(p.subtract(new BigInteger("1")).multiply(q.subtract(new BigInteger("1"))));
npq=p.multiply(q);
PK=new BigInteger("655337");
SK=PK.modInverse(f);
}
BigInteger encrypt(BigInteger message){
return message.modPow(PK,npq);
}
BigInteger decrypt(BigInteger encrypted){
return encrypted.modPow(SK,npq);
}
public String output(){
String str="";
str=str+"/n公钥:"+PK+"/n";
str=str+"/n私钥:"+SK+"/n";
return str;
}
public static void main(String[]a){
int N;
byte length[]=new byte[10];
System.out.print("input N:");
try{
System.in.read(length);
}
catch(Exception e){}
String str=new String(length);
N=Integer.parseInt(str.trim());
CRSA key=new CRSA(N);
BigInteger message=new BigInteger(N-1,random);
BigInteger encrypt=key.encrypt(message);
BigInteger decrypt=key.decrypt(encrypt);
System.out.println(key.output());
System.out.println("the source info:"+message+"/n");
System.out.println("the encrypted info:"+encrypt+"/n");
System.out.println("the decrypted info:"+decrypt+"/n");
}
}