You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现RSA加密时如何将字符串明文转换为可运算整数

问题根因

你之前直接拼接ASCII码字符串的方式不可逆,是因为不同字符的ASCII码位数不固定(可打印字符ASCII码范围为32~126,有2位、3位两种长度),解密时无法准确拆分拼接后的长串。

最优解决方案

推荐使用Python内置的字节与整数互转方法,完全可逆,是行业通用的RSA明文转换实现方式:

  • 加密侧转换逻辑:
    1. 将输入的字符串按utf-8编码为字节序列
    2. 用int.from_bytes()方法将字节序列转换为大端序整数,可直接代入RSA加密运算
    3. 注意转换后的整数必须小于RSA公钥的n值,超出的话需要对明文做分块处理
  • 解密侧还原逻辑:
    1. 解密得到明文整数后,用int.to_bytes()方法将整数转回字节序列
    2. 对字节序列做utf-8解码,得到原始字符串

修改后的完整示例代码

# 示例RSA密钥(实际使用请生成2048位及以上的正式密钥)
p = 61
q = 53
n = p * q
e = 17
d = 2753

# 加密逻辑
m = input("Enter message: ")
# 字符串转整数
m_bytes = m.encode('utf-8')
m_int = int.from_bytes(m_bytes, byteorder='big')
if m_int >= n:
    raise ValueError("明文太长,请使用更长的RSA密钥或对明文分块")
# 用内置三参数pow做快速模幂,性能远高于m**e %n
c = pow(m_int, e, n)
print("Encrypted message = %d" % c)

# 解密逻辑
decrypted_m_int = pow(c, d, n)
# 整数转回字符串
decrypted_m_bytes = decrypted_m_int.to_bytes((decrypted_m_int.bit_length() + 7) // 8, byteorder='big')
decrypted_m = decrypted_m_bytes.decode('utf-8')
print("Decrypted message =", decrypted_m)
注意事项
  • 实际生产环境不要用示例中的短密钥,至少使用2048位及以上长度的RSA密钥
  • 如果需要加密长文本,不要直接用RSA加密整个文本,标准方案是用RSA加密随机生成的对称密钥,再用对称密钥加密长文本,性能更优

内容的提问来源于stack exchange,提问作者haxor_girl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:15:01