使用pycrypto,如何导入RSA公钥并使用它加密字符串?

2024-05-17 12:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

RSA公钥:

pubkey='migfma0gcsqgsib3dqeba3uaa4gnadcbiqkbgqc35emayojxeojt5hxarhkzdbe3qiwe0hsq77cwp/8ubx07w2xkwnguy4k6hl2m/n9TOZMZsiBzer/fqV+qnpn1m9m94eum2gqgwkorj5batrcanjk/23ggpcstqatjn8pzbjbb2vlsvw5lfrsdmt1r7vaz+2eern/FitFXwIDAQAB'

如何导入并使用它加密字符串?

我尝试了下面的代码,但是RSA.construct()引发了异常(TypeError:必须是long,而不是str)。

from Crypto.PublicKey import RSA
from Crypto.Util import asn1
from base64 import b64decode

keyDER = b64decode(pubkey)
seq = asn1.DerSequence()
seq.decode(keyDER)
keyPub = RSA.construct((seq[0], seq[1]))
print keyPub.encrypt('mysecret', 32)

谢谢。


Tags: fromimportconstructcryptorsaseq公钥asn1
3条回答
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5
from base64 import b64decode,b64encode

pubkey = 'MIGfMA0GCSqGSIb3DQEBA3UAA4GNADCBiQKBgQC35eMaYoJXEoJt5HxarHkzDBEMU3qIWE0HSQ77CwP/8UbX07W2XKwngUyY4k6Hl2M/n9TOZMZsiBzer/fqV+QNPN1m9M94eUm2gQgwkoRj5battRCaNJK/23GGpCsTQatJN8PZBhJBb2Vlsvw5lFrSdMT1R7vaz+2EeNR/FitFXwIDAQAB'
msg = "test"
keyDER = b64decode(pubkey)
keyPub = RSA.importKey(keyDER)
cipher = Cipher_PKCS1_v1_5.new(keyPub)
cipher_text = cipher.encrypt(msg.encode())
emsg = b64encode(cipher_text)
print emsg

我也有麻烦。我让它像这样工作:

key = RSA.generate(2048)

binPrivKey = key.exportKey('DER')
binPubKey =  key.publickey().exportKey('DER')

privKeyObj = RSA.importKey(binPrivKey)
pubKeyObj =  RSA.importKey(binPubKey)

msg = "attack at dawn"
emsg = pubKeyObj.encrypt(msg, 'x')[0]
dmsg = privKeyObj.decrypt(emsg)

assert(msg == dmsg)

如果您正在写入文件,您可能会发现处理十六进制字符串比处理二进制字符串更容易。我经常使用这些助手函数

def bin2hex(binStr):
    return binascii.hexlify(binStr)

def hex2bin(hexStr):
    return binascii.unhexlify(hexStr)

通过使用:

RSA.importKey(externKey)

参数externKey如下所示:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAybVqRvfYvWbLsB98BqkD
lWd0/5y6SyhHt6/r6M0l7JXBweqMvxVt7XmI2yqPL56YxzcgQ8ycDkoqHJ+XozgP
iRnLNpYRlCzsiaOElbmQcnrI8iOb9Ahm6j0cbBB1S8VNvD+u9RQJt53zPxPj8/Dq
f1oNGFXOM8udNYWZaRCukLs/TumsAn0a+BF4639WtFiUvTWdVhlyvCQTs49ytRkH
rXH30RkB528RIvTGeW8xBTV4NaiTIzAEKCVSPagLr4Hzbb9b5+bODic/zkLGQazy
/NKOFgiB7kD2+WEMcuhTr5noeXau0PDAhgmrBhzzWOjUwwaO+ACvJLkPXZfjhy7P
+wIDAQAB
-----END PUBLIC KEY-----

您不应该b64解码externKey,字符串应该以“--BEGIN PUBLIC KEY--”和“--END PUBLIC KEY--”开头。

相关问题 更多 >