使用Python进行加密
我正在用Python写一个加密函数,我想用公钥来加密一个随机数。
我想知道如果我使用Crypto这个包(Crypto.publicKey.pubkey
),那么我该怎么使用类似下面的方法...
def encrypt(self,plaintext,k)
这里的k
本身就是一个随机数,这是不是意味着它是密钥?有没有人能帮我解答一下相关的问题?
3 个回答
0
你传给加密函数的值 k 其实并不是密钥的一部分。k 是一个随机值,用来让加密过程更随机。每次加密消息时,这个随机数应该都不一样。
不过,具体要看你使用的公钥算法,这个 k 可能需要满足一些严格的条件。如果 k 的随机性不够,你的加密可能就会变得不安全。这就让使用 pycrypto 变得有点麻烦,因为你需要对你用的加密系统了解得比这个库的开发者还要多。在我看来,这是 pycrypto 的一个严重缺陷,所以我建议你使用一些更高级的加密库,这样你就不需要了解这些复杂的细节了。比如可以考虑 M2Crypto 这样的库。
3
你可以试试 Pycrypto 这个库。
4
你是在尝试用收件人的公钥来加密一个会话或消息密钥,以便进行对称加密吗?其实在这种情况下,使用像SSH或TLS这样的方式可能会更简单。
回到你的问题:
Me Too Crypto(M2Crypto)是一个很好的工具,它是对openssl的一个封装。
首先,你需要获取收件人的公钥:
recip = M2Crypto.RSA.load_pub_key(open('recipient_public_key.pem','rb').read())
现在你可以加密你的消息了:
plaintext = random_integer_you_want_to_encrypt
msg = recip.public_encrypt(plaintext,RSA.pkcs1_padding)
这样,只有拥有收件人私钥的人才能解密这条消息。