首先, 找出三个数, p, q, r,
其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数
p, q, r 这三个数便是 private key
接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1)
这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了
再来, 计算 n = pq
m, n 这两个数便是 public key
编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a <n
如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t),
则每一位数均小於 n, 然後分段编码
接下来, 计算 b == a^m mod n, (0 <= b <n),
b 就是编码後的资料
解码的过程是, 计算 c == b^r mod pq (0 <= c <pq),
於是乎, 解码完毕 等会会证明 c 和 a 其实是相等的 :)
这个很简单 如果密码手工输入 理论上完全可以 但是密钥有时候二进制有时候会上百位 转化到其他进制要几十位 很容易出错 而且私钥 公钥是从一个推出另一个的 手工输入怎么保证你输入的公钥私钥就可以一定可以配成一对keyPair 而且公钥私钥 必须还要从用p q来算 等等如果手工输入太麻烦了为何我们不把这些繁琐的 容易出错的东西 封装起来来简化我们的开发呢
所以我们有了各种各样的开发包 各种各样的架构 各种各样的库
java中
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA")
KeyPair key = keyGen.generateKeyPair()
cipher.init(Cipher.ENCRYPT_MODE, key.getPublic())
cipher.init(Cipher.DECRYPT_MODE, key.getPrivate())
这是我以前写的代码的片段 不是连续的 大体上就是先得到一个rsa的密钥对 然后调用getpublic()
getprivatekey()获取公私钥就可以了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)