RAS算法简单示例(Java版)
2021-05-20 15:31
标签:public for idea main 秘钥 crypto mat @param 首字母 RSA算法——由三位发明者Ronald Rivest、Adi Shamir 和 Leonard Adleman 姓氏的首字母拼在一起组成。 RSA算法属于“公开密钥加密技术”,其加密和解密的秘钥不同。 用于加密的密钥可以公开,因此称为“公钥”,而用于解密的密钥是只有自己才知道,称为“私钥”。 简单算法如下所示: #####创建公钥##### (1)选两个质数a,b。 如:a=13,b=29 (2)求c=a*b。 如:c=377 (3)求d=(a-1)*(b-1) 如:d=336 (4)选择和d没有公约数的e 如:e = 5 (5)得到公钥(c,e) PublicKey [c=377, e=5] #####创建私钥##### (1)求出f,使其满足(f*e)÷d余1 如:f=269 (2)得到私钥(c,f) PrivateKey [c=377, f=269] ###使用公钥加密:密文 =((明文的e次方)÷c)的余数 ###使用私钥解密:明文 =((密文的f次方)÷c)的余数 代码: RAS算法简单示例(Java版) 标签:public for idea main 秘钥 crypto mat @param 首字母 原文地址:https://www.cnblogs.com/AndyHoo/p/9741113.htmlimport java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
class PublicKey {
int c;
int e;
@Override
public String toString() {
return "PublicKey [c=" + c + ", e=" + e + "]";
}
}
class PrivateKey {
int c;
int f;
@Override
public String toString() {
return "PrivateKey [c=" + c + ", f=" + f + "]";
}
}
/**
*
* @author Andy Hoo
*
*/
public class RSA {
PublicKey publicKey = new PublicKey();
PrivateKey privateKey = new PrivateKey();
public void mKey() {
System.out.println("#####创建公钥#####");
System.out.println("(1)选两个质数a,b。");
int a = 13, b = 29;
System.out.println(" 如:a=" + a + ",b=" + b);
System.out.println("(2)求c=a*b。");
int c = a * b;
System.out.println(" 如:c=" + c);
System.out.println("(3)求d=(a-1)*(b-1)");
int d = (a - 1) * (b - 1);
System.out.println(" 如:d=" + d);
System.out.println("(4)选择和d没有公约数的e");
int e;
for (e = 2; e commonDivisor = new ArrayList