我刚刚开始玩密码学和公钥加密。我创建了一个小型 python 程序,它是http://gnosis.cx/publish/programming/cryptology2.pdf中给出的算法的直译(参见 RSA 示例部分)。代码如下。
使用 GPG,如果您多次使用相同的密钥加密相同的文本,则每次都会给出不同的密文。是否可以在下面的程序中添加这种随机性(不诉诸复杂的高级数学:P)?这样我每次加密时都会得到不同的密文,并且仍然能够解密它?
def enc(message, pubkey) :
msg = [ord(char) for char in message]
e,n = pubkey
c = [m**e%n for m in msg]
return c
def dec(cipher, prikey) :
d,n = prikey
msg = [c**d%n for c in cipher]
msg = [chr(m) for m in msg]
message = ''.join(msg)
return message
p, q = 47, 71
n = p*q
e = 79
d = 1019
pubkey = (e, n)
prikey = (d, n)
msg = 'Hello World!'
print msg
cipher = enc(msg, pubkey)
for c in cipher : print c,
decipher = dec(cipher, prikey)
print '\n', decipher
它给出以下输出:
Hello World!
285 1113 1795 1795 2237 1379 1848 2237 2560 1795 1287 1260
Hello World!