得到解密的文本正确的输出

问题描述 投票:0回答:1

我在一个加密和解密使用公钥和私钥工作在python.I已加密的文本,我试图然而,解密,我得到实际的消息在一些随机文本的结尾!我可以得到帮助明白我做错了吗?

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5

msg = "supriya"
print("raw msg->", msg)
public_key_string = open("key.pem","r").read()
keyPub = RSA.importKey(public_key_string) # import the public key
cipher = Cipher_PKCS1_v1_5.new(keyPub)
#print(cipher.encrypt.__doc__)
cipher_text = cipher.encrypt(msg.encode()) # now we have the cipher
'print("cipher text->", cipher_text)'

private_key_string = open("key2.py","r").read()
private_key = RSA.importKey(private_key_string)
print(private_key)
decrypted = private_key.decrypt(cipher_text)
print(decrypted)

当我尝试print(decrypted)我得到:

b"\x02\x1cL`(\xf8\xbb\x84Eg\xc2\xf2Z\xa7\xa3\x10\xd06\x9a\x05
\xbd\xd0\x9e$\x94\x89\xd4\x04M\x7f\xb8\xc4\x01k\xf9\x9a\xb6&
\x07\xd6jbw\x9c>\x08\xdb\xe5\xda@\x9b\\\xa5Pz\xe8\x94s4+\xee
]'W.T+\xb6\xd7\x19\x7f\x85tL\xe9J:\x08\xf7\xbd\xbd\xdc\x99ep
\xd5\xea\xf1[\xff\x8a\x1d\xd5#\xd8s\n\xec\xb5,\xde\x1dE\xe7
\x99\x1f(\xbfm=iu1 \xe4^\x18\x10\x06z'\xf4_\x1c\x88[D\xa5
\xe6J\xa8\xf1\x7f\xb4\xe3r\xad)\xcb\xa3\x06\xf9\xbea6A\xf32
\x99\xa3y\xf5\xa3[\xc4m\xa8;\xfa\xcdQc#\xc8\t\x8d\xf8\xcb8
\xadC\xb0\x1c\xe8\x8b\xfc\x9c\x87&K\xd4\xd8\x9c/`\xbd\x92\\
\xc2\xe0:\x13e\x8b\xc9\xd8,p{\xb1@\x80\xbf\xf50\xb8\x84a\x15
\x0cF\xe1\xa4\xea\r\x16\x12:e}Edc\x9e\xa4\xb8\x87u\x1e\xbf
\x17\xf8\\\xeb\x9e\x88\x7f^\xb7\xb1\xa7o{s\x00supriya"
python encryption rsa
1个回答
1
投票

你用PKCS1v1.5 padding上的加密。这也许是好事,因为谁使用加密通常会想到它在几乎所有情况下(显然也包括你的)提供的安全性和保密性明确,以及RSA加密没有填充人们很容易破碎,而不是安全。搜索“教科书RSA”或crypto.SX和security.SX“RSA没有填充”对于很多Q&至于为什么。 (即使V1.5是不完美的;在某些情况下,它仍然很容易受到自适应密文攻击由于Bleichenbacher的,也包括那些栈和OAEP是目前最好的标准化填充但离开那个一边。)

但你并没有使用它的解密。其结果是,你的解密值包括V1.5加密填充,这与值2的八位组,如在RSA原始正确的大小即根据需要用于使“编码消息”许多非零随机八位组(EM)模量的大小,以及一个零字节的,其次是明文。像你一样的加密(除与专用密钥),你应该在解密使用PKCS1_v1_5

© www.soinside.com 2019 - 2024. All rights reserved.