use*_*916 9 python rsa pycrypto
RSA公钥:
PUBKEY = 'MIGfMA0GCSqGSIb3DQEBA3UAA4GNADCBiQKBgQC35eMaYoJXEoJt5HxarHkzDBEMU3qIWE0HSQ77CwP/8UbX07W2XKwngUyY4k6Hl2M/n9TOZMZsiBzer/fqV + QNPN1m9M94eUm2gQgwkoRj5battRCaNJK/23GGpCsTQatJN8PZBhJBb2Vlsvw5lFrSdMT1R7vaz + 2EeNR/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)
Run Code Online (Sandbox Code Playgroud)
谢谢.
Che*_*het 15
我也遇到了麻烦.我得到它像这样工作:
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)
Run Code Online (Sandbox Code Playgroud)
如果您正在写文件,您可能会发现更容易处理十六进制字符串而不是二进制字符串.我正在使用这些辅助函数
def bin2hex(binStr):
return binascii.hexlify(binStr)
def hex2bin(hexStr):
return binascii.unhexlify(hexStr)
Run Code Online (Sandbox Code Playgroud)
小智 12
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
Run Code Online (Sandbox Code Playgroud)
通过使用:
RSA.importKey(externKey)
Run Code Online (Sandbox Code Playgroud)
使用参数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-----
Run Code Online (Sandbox Code Playgroud)
你不应该b64对externKey进行编码,字符串应该以"----- BEGIN PUBLIC KEY -----"和"----- END PUBLIC KEY -----"开头.
我最终使用的方法基于这里的一些答案:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5
def encrypt_data(data):
with open("/path/to/public.pem", "rb") as k:
key = RSA.importKey(k.read())
cipher = Cipher_PKCS1_v1_5.new(key)
return cipher.encrypt(data.encode())
def decrypt_data(data):
with open("path/to/private.pem", "rb") as k:
key = RSA.importKey(k.read())
decipher = Cipher_PKCS1_v1_5.new(key)
return decipher.decrypt(data, None).decode()
message = "hello world!"
encrypted = encrypt_data(message)
decrypted = decrypt_data(message)
Run Code Online (Sandbox Code Playgroud)
从文档中
importKey(externKey, passphrase=None)
Import an RSA key (public or private half), encoded in standard form.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52865 次 |
| 最近记录: |