【发布时间】:2013-11-18 20:58:44
【问题描述】:
我正在尝试了解公钥和私钥的 pyCrypto 加密和解密方法,但我看到了一些奇怪的东西。假设我有一组私钥和公钥,存储在文件 dummy_private.txt 和 dummy_public.txt 中。
我这样创建一个私钥对象和公钥对象:
private_key_file='dummy_private.txt'
f = open(private_key_file, 'r')
privateKey = RSA.importKey(f.read(),None)
f.close()
public_key_file='dummy_public.txt'
f = open(public_key_file, 'r')
publicKey = RSA.importKey(f.read(),None)
f.close()
现在假设我想加密一些消息。我可以这样做:
s='This is a super secret message'
sutf8=s.encode('utf8')
enc=publicKey.encrypt(sutf8,None)[0]
encb64=base64.encodestring(enc)
print "Public key Encoded message is %s" % (encb64,)
这是有道理的,因为我用公钥加密,我应该能够用私钥解密。
不过,我也可以使用私钥对上面的内容进行加密,结果是一样的!
enc2=privateKey.encrypt(sutf8,None)[0]
encb642=base64.encodestring(enc2)
print "Private key Encoded message is %s" % (encb642,)
当我使用私钥或公钥打印出加密数据的 base64 编码版本时,它们是相同的!这是为什么呢?
这引发了使用私钥对某些东西进行数字签名的问题。如果我可以用公钥签署某些东西并获得相同的结果,那么签名如何验证我是我所说的那个人?这一定是我不理解的加密方法的一些问题。谁能解释一下?
由于使用公钥和私钥加密会得到相同的结果,因此无论是使用私钥还是公钥进行加密,似乎都可以使用私钥进行解密。我完全不明白为什么可以使用私钥加密并获得与使用公钥相同的结果。
【问题讨论】: