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)的余数
代码:
import 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(); int min = Math.min(a1, a2); for (int n = 2; n
RAS算法简单示例(Java版)
标签:public for idea main 秘钥 crypto mat @param 首字母
原文地址:https://www.cnblogs.com/AndyHoo/p/9741113.html