用于解密RSA消息的python脚本
我正在编写一个python脚本来解密RSA加密的消息,首先消息是用十六进制加密的,密钥是相同的,所以我所做的是将这两个从十六进制转换为base64,如下所示: 关键: 致: 和信息:用于解密RSA消息的python脚本,python,encryption,Python,Encryption,我正在编写一个python脚本来解密RSA加密的消息,首先消息是用十六进制加密的,密钥是相同的,所以我所做的是将这两个从十六进制转换为base64,如下所示: 关键: 致: 和信息: 4c0605e901b09d75c5f5befe7438d7246f988531cc7a39a59f24b9488d47dfae9fc8beb5117f34a316f9380607bf239ba6eca84da47a12d720986a8a0100a7e9d7028d7e423557055b9e250f271d64
4c0605e901b09d75c5f5befe7438d7246f988531cc7a39a59f24b9488d47dfae9fc8beb5117f34a316f9380607bf239ba6eca84da47a12d720986a8a0100a7e9d7028d7e423557055b9e250f271d6436018c58e79a8f26bac10768776f06dc1786dd7428b3c445b8993e884630b36cb2d300fa5dc1fe0eba9e433062d9d8a58f33bf6f93aa37298a5703ccbf71c93adea447f018e9f75bb43dbc528cfc9bed865a9ba43f926071dabc89ccca2e000f1a966855cc9816e45c0113edb55a700198d346a90487b5ff1191994973eb1b5252b22c6410aa70ea4e9c3ebd468ef273d7cf9d15b5824244cd25f252886d1edfe2d6f2caa5d5e00fd84597e3de192db41b
致:
好的,然后我使用以下方法将base64消息转换为原始数据消息:
cat secret|base64-d>rawsecret
现在我有一个秘密和一把钥匙,我想是正确的,对吧
所以我开始写这个剧本:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64
import zlib
def decrypt_blob(encrypted_blob, private_key):
rsakey = RSA.importKey(private_key)
rsakey = PKCS1_OAEP.new(rsakey)
encrypted_blob = base64.b64decode(encrypted_blob)
chunk_size = 2048
offset = 0
decrypted = ""
while offset < len(encrypted_blob):
chunk = encrypted_blob[offset: offset + chunk_size]
decrypted += rsakey.decrypt(chunk)
offset += chunk_size
return zlib.decompress(decrypted)
fd = open("rawkey.pem", "rb")
key = fd.read()
fd.close()
fd = open("rawsecret", "rb")
encrypted_blob = fd.read()
fd.close()
print decrypt_blob(encrypted_blob, key)
从Crypto.PublicKey导入RSA
从Crypto.Cipher导入PKCS1\u OAEP
导入base64
进口zlib
def decrypt_blob(加密的_blob,私钥):
rsakey=RSA.importKey(私钥)
rsakey=PKCS1_OAEP.new(rsakey)
加密的\u blob=base64.b64解码(加密的\u blob)
区块大小=2048
偏移量=0
解密=“”
当偏移量
但是我得到了一个错误:
回溯(最近一次呼叫最后一次):
文件“decrypt.py”,第35行,在
打印解密\u blob(加密\u blob,密钥)
文件“decrypt.py”,第20行,在decrypt_blob中
解密+=rsakey.decrypt(块)
和具有不正确长度的密文。这是为什么?有术语错误,如<代码>第一条消息以十六进制加密,没有输出编码为十六进制。python库不接受Base64,请参见@kelalaka好的,如果它不接受Base64,那么我应该使用什么?@kelalaka不,我在这里列出的所有内容都是我需要的have@kelalaka你认为我最好选择什么格式?我还需要将密钥和消息转换为该格式,还是只转换为这两种格式中的一种?但事实并非如此。它不使用任何填充方案,想想原始RSA。第一个也是唯一的提示。
4c0605e901b09d75c5f5befe7438d7246f988531cc7a39a59f24b9488d47dfae9fc8beb5117f34a316f9380607bf239ba6eca84da47a12d720986a8a0100a7e9d7028d7e423557055b9e250f271d6436018c58e79a8f26bac10768776f06dc1786dd7428b3c445b8993e884630b36cb2d300fa5dc1fe0eba9e433062d9d8a58f33bf6f93aa37298a5703ccbf71c93adea447f018e9f75bb43dbc528cfc9bed865a9ba43f926071dabc89ccca2e000f1a966855cc9816e45c0113edb55a700198d346a90487b5ff1191994973eb1b5252b22c6410aa70ea4e9c3ebd468ef273d7cf9d15b5824244cd25f252886d1edfe2d6f2caa5d5e00fd84597e3de192db41b
TAYF6QGwnXXF9b7+dDjXJG+YhTHMejmlnyS5SI1H366fyL61EX80oxb5OAYHvyObpuyoTaR6EtcgmGqKAQCn6dcCjX5CNVcFW54lDycdZDYBjFjnmo8musEHaHdvBtwXht10KLPERbiZPohGMLNsstMA+l3B/g66nkMwYtnYpY8zv2+TqjcpilcDzL9xyTrepEfwGOn3W7Q9vFKM/JvthlqbpD+SYHHavInMyi4ADxqWaFXMmBbkXAET7bVacAGY00apBIe1/xGRmUlz6xtSUrIsZBCqcOpOnD69Ro7yc9fPnRW1gkJEzSXyUohtHt/i1vLKpdXgD9hFl+PeGS20Gw==
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64
import zlib
def decrypt_blob(encrypted_blob, private_key):
rsakey = RSA.importKey(private_key)
rsakey = PKCS1_OAEP.new(rsakey)
encrypted_blob = base64.b64decode(encrypted_blob)
chunk_size = 2048
offset = 0
decrypted = ""
while offset < len(encrypted_blob):
chunk = encrypted_blob[offset: offset + chunk_size]
decrypted += rsakey.decrypt(chunk)
offset += chunk_size
return zlib.decompress(decrypted)
fd = open("rawkey.pem", "rb")
key = fd.read()
fd.close()
fd = open("rawsecret", "rb")
encrypted_blob = fd.read()
fd.close()
print decrypt_blob(encrypted_blob, key)