You need to enable JavaScript to run this app. 使用pycryptodome实现RSA加密后密文解码报错该如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

使用pycryptodome实现RSA加密后密文解码报错该如何解决?

解决方案

首先明确核心前提:RSA 加密输出的是无对应文本编码的原始二进制字节串,并非由 UTF-8、Latin1 等文本字符集编码生成,所以你尝试用各类文本编码解码的操作本身就是错误的,自然会出现报错、内容丢失的问题。

场景1:直接操作密文字节拆分取值

不需要做任何解码操作,直接对返回的字节对象进行索引、切片即可:

  • 直接用字节对象[下标]即可拿到对应位置的字节值(取值范围0~255)
  • 拆分8段的示例代码:
# 拿到加密后的字节串
cipher_bytes = encrypt_with_rsa("待加密的原始文本")
# 计算每段基础长度
seg_len = len(cipher_bytes) // 8
segments = []
for i in range(8):
    # 最后一段兼容长度整除不了的情况
    end = len(cipher_bytes) if i == 7 else (i+1)*seg_len
    segments.append(cipher_bytes[i*seg_len : end])
# 每段取单个字节使用
target_bytes = [seg[0] for seg in segments]

场景2:需要把密文转成可读字符串存储/传输

使用专门用于二进制转文本的编码即可,不会丢失任何信息:

  • 转十六进制字符串:
# 转16进制
hex_cipher = cipher_bytes.hex()
# 转回原始字节
restored_bytes = bytes.fromhex(hex_cipher)
  • 转Base64字符串:
import base64
# 转Base64
b64_cipher = base64.b64encode(cipher_bytes).decode('ascii')
# 转回原始字节
restored_bytes = base64.b64decode(b64_cipher)

额外提示:只有当字节串本身是通过对应文本字符集编码生成的内容时,用该字符集解码才是合法操作,随机生成的加密二进制字节不符合这个前提,不要做无意义的文本解码尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 02:36:03