但是这好像不是RSA算法,看了一下RSA算法,其描述如下:
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密钥对。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n;
--------------------
如果说要加密c,那么应该是d=pow(c,2)%a,才对。。。
请密码学高手指教
算法为 ElGamal (或其引申的DH/DSA).
1. 密钥对产生办法: 选择一个素数p, 两个随机数 g 和 x, 其中 g, x < p, 计算 y = g ^ x ( mod p ), 则其公钥为 y, g 和 p, 私钥是x.
对应现实, 服务器发送的数据分别是: g = 2, p = a, y = b. x 保留在服务器.
2. 生成密钥办法: 选择一个随机数 k, k 与 p - 1 互质, 计算
a = g ^ k ( mod p ) <= 对应 d = 2 ^ c (mod a)
则共同的加密密钥为 b = y ^ k ( mod p ) <= 对应 e = b ^ c (mod a).
由于 b = y ^ k = (g ^ x) ^ k = g ^ (x * k) = (g ^ k) ^ x = a ^ x (mod p), 由于服务器知道 x , 所以知道 a 就可以算出同样的 b 了.