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

如何修改Python RSA加密代码以实现字符串分3字符块加密?

解决字符串适配RSA加密的修改方案

你的代码报错是因为直接将字符串传入了需要数值类型的加密函数,math.pow无法处理字符串。要实现按3字符分块的RSA加密,需要完成以下核心修改:

必须修改的核心点

  • 字符串分块:将输入字符串分割为固定长度(3字符)的块,不足长度的补填充字符(如空格)。
  • 字符串转整数:把每个字符块转换为RSA可处理的整数(基于ASCII编码映射)。
  • 修正模幂运算:替换math.pow为Python内置的pow(base, exp, mod),避免浮点精度问题,同时直接完成模运算。
  • 适配分块加密逻辑:遍历所有分块,逐个加密后收集结果。
  • 密钥参数调整(可选但必要):原密钥的n = 521*757 = 394397,而3字符块转成的最大整数是256^3 -1 = 16777215,远大于n,违反RSA明文必须小于n的规则。因此要么换更大的素数让n>16777215,要么将分块大小改为2字符(256²=65536 < 394397)。

修改后的完整代码(3字符分块版本)

# 更换为更大的素数,确保n > 256^3(16777216)
p = 4099
q = 4111
e = 11
n = p * q

def chunk_string(s, chunk_size=3):
    # 将字符串分割为3字符一组,不足补空格
    chunks = []
    for i in range(0, len(s), chunk_size):
        chunk = s[i:i+chunk_size]
        if len(chunk) < chunk_size:
            chunk += ' ' * (chunk_size - len(chunk))
        chunks.append(chunk)
    return chunks

def str_to_int(s):
    # 将字符串转换为整数(按ASCII码的256进制组合)
    num = 0
    for idx, char in enumerate(reversed(s)):
        num += ord(char) * (256 ** idx)
    return num

def encrypt_block(plain_num):
    # 内置pow直接计算模幂,避免浮点错误
    if plain_num >= n:
        raise ValueError(f"明文块数值{plain_num}大于n={n},请调整分块大小或密钥")
    return pow(plain_num, e, n)

# 输入处理
message = input("Enter Plaintext: ")
print("Original Message is: ", message)

# 分块并执行加密
text_chunks = chunk_string(message)
encrypted_blocks = []
for chunk in text_chunks:
    plain_num = str_to_int(chunk)
    encrypted = encrypt_block(plain_num)
    encrypted_blocks.append(encrypted)

print("Encrypted Message Blocks: ", encrypted_blocks)

代码说明

  1. 分块函数:chunk_string保证每个块长度一致,方便后续统一转换为整数。
  2. 字符串转整数:str_to_int将每个字符的ASCII码按256进制加权计算,把3字符块映射为一个整数。
  3. 加密优化:pow(plain_num, e, n)是Python专门优化的模幂运算,比先算幂再取模效率高得多,且不会出现浮点精度丢失。
  4. 密钥调整:选用的4099和4111都是素数,乘积n=16850989大于3字符块的最大可能值,符合RSA加密要求。

如果不想更换密钥,只需将chunk_string的chunk_size改为2即可,无需调整p和q参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:45:34