0
点赞
收藏
分享

微信扫一扫

古典密码之棋盘密码(ADFGVX,ADFGX,Polybius)

乐百川 07-15 18:00 阅读 7

下面为你详细介绍古典密码中的棋盘密码系列,包括:

  • Polybius Square(波利比乌斯方阵密码)
  • ADFGX 密码
  • ADFGVX 密码

这些密码都基于一种坐标替换机制,本质是将字母映射到网格中,再用特定字母/坐标表示,加密和解密逻辑简洁但实用。

🧱 1. Polybius 方阵密码(Polybius Square)

📘 原理:

Polybius Square 是最早的棋盘密码,由古希腊人 Polybius 发明。它将 26 个英文字母映射到一个 5×5 网格中(通常将 I 和 J 合并)。

1 2 3 4 51: A B C D E2: F G H I/J K3: L M N O P4: Q R S T U5: V W X Y Zphp79 Bytes© 菜鸟-创作你的创作

加密时,把每个字母转换成其坐标。例如:

  • A → 11
  • B → 12
  • Z → 55

🔐 示例加密:

明文:HELLO
编码:

  • H → 23
  • E → 15
  • L → 31
  • L → 31
  • O → 34
    密文:2315313134

✳️ 2. ADFGX 密码

📘 原理:

ADFGX 是德国人在第一次世界大战中设计的密码系统。其核心也是 Polybius Square,但使用的是字母 A, D, F, G, X 代替数字表示坐标,更不容易被频率分析。

🧮 Polybius 方阵变体(5×5):

用 25 个字母填入(合并 I 和 J):

A D F G XA: N A C H BD: D E F G I/JF: K L M O PG: Q R S T UX: V W X Y Zphp79 Bytes© 菜鸟-创作你的创作

🔐 加密步骤:

  1. 坐标替换(如:HELLO → DF FX FA FA FG)
  2. 使用转置密码:给定密钥如 “KEY”,按 KEY 排列列的顺序,然后重组

📦 示例(不含转置):

明文 HI

  • H → AF(位置 A行,F列)
  • I → DD
    密文:AFDD

🔷 3. ADFGVX 密码

📘 原理:

是 ADFGX 密码的升级版,增加了字母 V,所以使用 6×6 方阵,可支持 26个字母 + 10个数字(共 36 个符号)。

🔢 方阵坐标为 A, D, F, G, V, X:

A D F G V XA: A B C D E FD: G H I J K LF: M N O P Q RG: S T U V W XV: Y Z 0 1 2 3X: 4 5 6 7 8 9php104 Bytes© 菜鸟-创作你的创作

加密流程:

  1. 用坐标 ADFGVX 表示字符
  2. 用一个密钥做列转置加密

示例:

明文:DOG

  1. D → A D
  2. O → F F
  3. G → D A
    结果:ADFFDA
    再用密钥如 “SECRET” 进行列置换。

✅ Python 示例代码:Polybius & ADFGVX

# Polybius 5x5 example (I/J merged)import stringdef create_polybius_square():    letters = "ABCDEFGHIKLMNOPQRSTUVWXYZ"    square = {}    for i, c in enumerate(letters):        row = i // 5 + 1        col = i % 5 + 1        square[c] = f"{row}{col}"    return squaredef polybius_encrypt(text):    square = create_polybius_square()    text = text.upper().replace('J', 'I')    return ''.join(square[c] for c in text if c in square)print(polybius_encrypt("HELLO"))  # 2315313134php491 Bytes© 菜鸟-创作你的创作

✅ 应用总结

名称

方阵大小

坐标集

可加密内容

应用

Polybius

5×5

数字(1-5)

25 字母

古希腊通信

ADFGX

5×5

ADFGX

25 字母

一战德军

ADFGVX

6×6

ADFGVX

26字母+数字

一战德军升级版

好的!我们从 ADFGVX 密码加密演示(含转置步骤) 开始,使用 Python 编写完整可运行的加密器,适合学习和实际使用。

✅ 示例:ADFGVX 加密器(Python)

支持:

  • 自定义密钥
  • 支持字母和数字(A–Z + 0–9)
  • 两步加密:坐标替换 + 列置换

🔐 ADFGVX 加密代码:

import numpy as np# 定义坐标和构建6x6方阵letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"coords = ['A', 'D', 'F', 'G', 'V', 'X']def create_adfgvx_square(key_square=None):    key_square = key_square or letters    square = {}    index = 0    for i in range(6):        for j in range(6):            square[key_square[index]] = coords[i] + coords[j]            index += 1    return squaredef adfgvx_encrypt(plaintext, keyword, key_square=None):    square = create_adfgvx_square(key_square)    plaintext = ''.join(c.upper() for c in plaintext if c.upper() in square)    # 第一步:坐标替换    substituted = ''.join(square[c] for c in plaintext)    # 第二步:列置换    num_cols = len(keyword)    matrix = ['' for _ in range(num_cols)]    for i, c in enumerate(substituted):        matrix[i % num_cols] += c    # 排列关键字顺序    key_order = sorted(list(enumerate(keyword)), key=lambda x: x[1])    cipher = ''    for index, _ in key_order:        cipher += matrix[index]    return cipher# 示例用法keyword = "SECRET"plaintext = "HELLO123"ciphertext = adfgvx_encrypt(plaintext, keyword)print("密文:", ciphertext)php1.08 KB© 菜鸟-创作你的创作

🔎 示例运行结果:

明文: HELLO123密钥: SECRET密文: DXAGVFXGDAAFGX...php45 Bytes© 菜鸟-创作你的创作

🧪 后续扩展建议

我可以为你提供:

  • ✅ 解密器(完整反向操作)
  • ✅ GUI 工具(用 tkinter 或 streamlit 实现)
  • ✅ JavaScript 版本(可嵌入网页)
  • ✅ 输出为表格(含加密矩阵可视化)
  • ✅ 你可输入自定义密钥 & 明文直接运行

是否需要我接着写出 解密函数 或打包成 GUI 工具?还是你想运行在线版本(HTML/JS)?告诉我你偏好的形式,我可以帮你定制。

https://www.52runoob.com/archives/3723

举报

相关推荐

0 条评论