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

Python如何实现按字母序替换字符的无依赖加密解密功能

基于最近字母序匹配的字符替换加密实现

需求迭代说明

  • 初始方案设想为凯撒类偏移加密:每个字母替换为字母表中向后偏移n位的对应字母,曾考虑用sort排序实现字母序逻辑,不确定可行性后调整需求:将每个待替换字母替换为字母序最接近的对应字母
  • 第一版实现为手动指定索引交换字符(例如直接交换msg[0]与msg[5]),需要人工固定交换位置,无法自动化处理,不符合要求。

第一版手动交换实现代码

key = 4
msg = ['A', 'C', 'T', 'I', 'O', 'N']


def cipher_cesar(msg,key):

    msg[0],msg[5] = msg[5], msg[0]
                 
                 
    print(msg)
    answer = int(input("insert the key to find word"))
    if answer == key:
         
        return decipher_cesar(msg,answer)
       


def decipher_cesar(msg,key):
    
    
    msg[5],msg[0] = msg[0], msg[5]
    print(msg)
    
    
print(cipher_cesar(msg,key))

该版本逻辑为固定位置交换字符,输入正确密钥即可解密还原,但无法满足「所有字母自动替换为字母序最接近的字母」的要求。

现有尝试的问题

后续尝试使用ord()函数获取字符ASCII码实现匹配,但代码仅能处理列表首个字符,无法完成全列表自动替换,即无法遍历每个字符,自动匹配列表内与其字母序差值最小的字符完成替换,对应尝试代码如下:

m = ['A', 'C', 'T', 'I', 'O' , 'N']
mzero = m[0]


for i in range(len(m)-1):
    listes = []
    result = ord(mzero) - ord(m[i+1])
    print(f'result of {ord(mzero)} - {ord(m[i+1])}:', result)
    listes.append(abs(result))
    
    print(listes)
    
    if ord(mzero) - ord(m[i]) == min(listes):
        mzero, m[i] = m[i], mzero
        print(m)
        print('The closest value is :', min(listes))

实现约束与方案

  • 禁止引入numpy等任何第三方库,仅使用Python原生语法实现
  • 无需手动指定字符交换位置,全列表自动完成匹配替换
  • 加密解密逻辑可逆,输入正确密钥即可还原原始消息

核心匹配逻辑(原参考教程内容翻译整理):

  1. 遍历列表中每一个字符,对当前字符,遍历列表内其余所有字符,用ord()计算两个字符的ASCII码差值,取绝对值
  2. 筛选出差值最小的字符作为替换项;若存在多个差值相同的字符,可结合密钥值选定固定偏移方向的字符,避免匹配冲突
  3. 加密时记录原字符与替换字符的映射关系,解密时按照映射反向替换即可还原内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:24:29