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

如何基于原密钥与sorted方法还原排序列的换位密码

带列字母序排序的换位密码解密:列还原方案

加密逻辑回顾

我们的任务是实现一种基于密钥列排序的换位密码,加密时会将矩阵列按密钥字符的字典序重新排列。以下是完整加密流程示例:

原始矩阵(密钥:Banner)

|     B    |     A    |     N    |     N    |     E    |     R    | <== 原始密钥
-------------------------------------------------------------------
|     F    |     L    |     A    |     M    |     I    |     N    |
|     G    |     O    |     _    |     I    |     S    |     _    |
|     A    |     _    |     B    |     I    |     R    |     D    |

按密钥字母序重排后的矩阵

|     A    |     B    |     E    |     N    |     N    |     R    | <== 字母序排序后的密钥
-------------------------------------------------------------------
|     L    |     F    |     I    |     A    |     M    |     N    |
|     O    |     G    |     S    |     _    |     I    |     _    |
|     _    |     A    |     R    |     B    |     I    |     D    |

最终密文

按列从上到下、从左到右读取矩阵,得到密文:

LO_FGAISRA_BMIIN_D

加密代码片段

以下是实现上述加密逻辑的Python代码(number_of_columns 为密钥长度):

cipher_key_order = sorted(range(len(cipher_key)) , key=lambda alphabet: cipher_key[alphabet])
i = 0
encrypted_matrix = [[" " for column in range(0, number_of_columns)] for row in range(0, number_of_rows)]
for col in range(number_of_columns):
    for row in range(number_of_rows):
        encrypted_matrix[row][col] = original_matrix[row][cipher_key_order[i]]
    i += 1

核心问题

给定原加密密钥,如何在不将密钥持久化存储到代码或设备本地的前提下,优先使用sorted()等方法将加密后的矩阵列还原至原始位置?

解决方案

要还原列的原始顺序,核心是推导加密时列排序的逆映射关系——即从“排序后的列索引”回溯到“原始列索引”的对应规则。

1. 生成加密时的列排序映射

加密时,cipher_key_order是原始列索引按密钥字符排序后的结果。以密钥Banner(小写为banner)为例,索引0-5对应字符b,a,n,n,e,r,排序后的索引顺序为[1,0,4,2,3,5](字符顺序:a(1) < b(0) < e(4) < n(2) < n(3) < r(5))。

2. 推导解密用的逆映射

通过对加密时的排序结果再次排序,并记录原始位置,即可得到逆映射:

# 临时获取密钥生成解密用的列顺序(密钥仅临时使用,不存储)
decipher_order = sorted(range(len(cipher_key)), key=lambda x: cipher_key_order[x])

比如上述例子中,cipher_key_order = [1,0,4,2,3,5],对其索引排序后,得到的decipher_order为[1,0,3,4,2,5]——这就是将加密矩阵列还原回原始顺序的索引规则。

3. 还原原始矩阵

利用decipher_order重新排列加密矩阵的列,即可得到原始矩阵:

# 假设encrypted_matrix为加密后的矩阵
decrypted_matrix = [[" " for _ in range(number_of_columns)] for _ in range(number_of_rows)]
for col in range(number_of_columns):
    original_col = decipher_order[col]
    for row in range(number_of_rows):
        decrypted_matrix[row][col] = encrypted_matrix[row][original_col]

关键说明

  • 密钥仅在生成映射时临时使用,无需持久化存储到代码或设备中;
  • 全程依赖sorted()函数完成映射的生成与逆推,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:05:56