【问题标题】:Python - How to convert a string to an integer for RSA encryptionPython - 如何将字符串转换为整数以进行 RSA 加密
【发布时间】:2021-12-16 10:42:19
【问题描述】:

我已经用 Python 实现了一个简单的 RSA 加密/解密程序。当消息 m 是数字时,它工作正常。但是,如果我想使用像“hello”这样的消息,我该如何转换它以将其插入到 m**e 中,它需要一个整数?它仍然需要反转才能解密。我尝试过 ord() 和 encode() 来创建一个长整数字符串的 ASCII 数字,但是我无法反转它。

m = input("Enter message: ")

# Encryption of m
m = int(m)
c = (m**e) % n
print("Encrypted message = %d" % c)

【问题讨论】:

  • 你需要一个唯一的编码和解码并且RSA对加密有限制;模数大小。将字符串转换为字节而不是整数...

标签: python encryption rsa


【解决方案1】:

如果要使用python内置类型,可以使用int.from_bytesint.to_bytes(See docs here.)

import math


def string_to_int(s):
    return int.from_bytes(s.encode(), byteorder='little')


def int_to_string(i):
    length = math.ceil(i.bit_length() / 8)
    return i.to_bytes(length, byteorder='little').decode()


if __name__ == '__main__':
    m = input("Enter message: ")

    m_int = string_to_int(m)
    print(m_int)
    print(int_to_string(m_int))

string_to_int 函数只需使用str.encode 转换为字节,然后使用int.from_bytes 转换为int

int_to_string 函数与int.to_bytesstr.decode 的工作方式类似,但它需要知道要创建的bytes 对象的长度。为了计算整数可以容纳的最小字节数,我们使用将它使用的位数除以 8,然后向上取整 - 如果向下取整,那么将没有足够的字节来表示该数字。

【讨论】:

  • 成功了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2013-08-12
  • 2015-11-15
相关资源
最近更新 更多