我编码了RSA解密和加密功能,如下所示:
def encrypt(m,e,n):
return pow(int(m.encode('hex'), 16), int(e, 10), int(n, 10) )
def decrypt(c,d,n):
p = pow(int(c, 10), int(d, 10), int(n, 10))
return hex(p)[2:].decode('hex')
当我想使用以下这些功能时,一切正常
e = "65537"
n = "21856687"
d = "12096993"
m = "TH"
c = encrypt(m,e,n)
print decrypt(str(c),d,n)
但是当我更改要加密的邮件时(在这种情况下 m )我 得到错误的答案,实际上他们看起来像垃圾价值。我的意思是说 通过更改消息正在尝试一个长度更长的消息 超过2,如下所示。
e = "65537"
n = "21856687"
d = "12096993"
m = "THIS IS A HIDDEN MESSAGE"
c = encrypt(m,e,n)
print decrypt(str(c),d,n)
答案 0 :(得分:1)
消息字节(解释为Big Endian编号)必须小于n
才能进行往返。您需要提升p
和q
或缩小您的信息。 (你的"垃圾"是一个等效的消息模数n,它应该往返很好)
虽然这是希望的功课,但我觉得有必要声明原始(无衬垫)RSA是一个坏主意,而DIY RSA是一个坏主意。前者易受各种数据攻击,后者可能存在时序漏洞导致私钥泄露。