【问题标题】:Decode text encoded with RSA解码使用 RSA 编码的文本
【发布时间】:2016-11-10 10:59:09
【问题描述】:

我有一个 RSA 公钥/私钥对和密码。我正在尝试解码使用上述密钥加密的文本。编码文本始终是 512 个字符长的 alpha-num 字符串。

我已经尝试使用 SOF 问题Decrypt using an RSA public key with PyCrypto提供的代码

首先,我使用了我的私钥,该私钥是用 PEM 文件中的 AES-256-CBC 编码的。 这是 privkey.pem 的开始,这让我觉得它的 AES-256 加密

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC
<rest of the data>
-----END RSA PRIVATE KEY-----

但我收到以下错误消息。

ValueError: PEM encryption format not supported.

所以我向来源询问了他们给我的没有 AES 加密的私钥。现在使用这个密钥解密的作品和解密的文本如下所示(我只显示了一些文本)

b'\x93\n(\x92\x02\x9aF*?\x18"\x19\x12Gn\xc2\<rest of the text>'

这不是我的纯文本。我究竟做错了什么?谁能帮我解码这段文字。

编辑 1:

根据下面 Maarten 的回答,我尝试了以下代码,但仍然出现错误。

这是我的解密代码

from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
import ast

encrypted_text = "39085fc25e<HIDDEN>2fcce845760391ff"

key = RSA.importKey(open("\\path_to_key\\private.der", encoding="utf8").read())
cipher = PKCS1_OAEP.new(key)

message = cipher.decrypt(ast.literal_eval(str(uid)))

我得到错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 1: invalid start byte

请注意,我必须使用下面的代码将我的私钥从 PEM 转换为 DER,因为使用 PEM 文件我得到了SyntaxError: unexpected EOF while parsing

openssl rsa -in private_key.pem -out private_key.der -outform DER

因为

【问题讨论】:

  • 我投了这个话题,因为除了填充的想法之外,根本没有足够的信息继续下去。尝试使用测试密钥并在此处发布所需信息。
  • 我不确定您需要哪些额外信息。我的密钥是使用openssl 创建的,并且它们已经在使用中,所以我无法通过重新创建它们来更改它们。我得到了一个 public_key.txt、private_key.pem(它是 AES-256 加密的)和密码。如何使用 python 使用这些密钥解密文本?
  • 我使用 .net c# 代码加密了文本,并想使用 python 解密代码,但我可以在哪里获得 RSA.importKey ??

标签: python encryption cryptography pycrypto


【解决方案1】:

这是我找到的解决方案。

首先我使用pycryptodomelibrray 而不是pycrypto。

以下是我的编码和解码功能。

from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA

def encode_rsa(message, key_path):    
    key = RSA.importKey(open(key_path).read())
    cipher = PKCS1_OAEP.new(key)
    ciphertext = cipher.encrypt(message)
    return ciphertext

def decode_rsa(ciphertext, key_path):
    key = RSA.importKey(open(key_path).read())
    cipher = PKCS1_OAEP.new(key)
    # before decrypt convert the hex string to byte_array 
    message = cipher.decrypt(bytearray.fromhex(ciphertext))
    return message

使用上述两个函数,我能够正确地对数据进行编码/解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多