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

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

  • ADFGX 密码

  • ADFGVX 密码

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


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

📘 原理:

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

   1 2 3 4 5
1: A B C D E
2: F G H I/J K
3: L M N O P
4: Q R S T U
5: V W X Y Z

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

  • 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 方阵变体(5x5):

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

   A D F G X
A: N A C H B
D: D E F G I/J
F: K L M O P
G: Q R S T U
X: V W X Y Z
🔐 加密步骤:
  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 X
A: A B C D E F
D: G H I J K L
F: M N O P Q R
G: S T U V W X
V: Y Z 0 1 2 3
X: 4 5 6 7 8 9

加密流程:

  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 string

def 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 square

def 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"))  # 2315313134

✅ 应用总结

名称方阵大小坐标集可加密内容应用
Polybius5×5数字(1-5)25 字母古希腊通信
ADFGX5×5ADFGX25 字母一战德军
ADFGVX6×6ADFGVX26字母+数字一战德军升级版

如果你想要具体的加解密演示(含转置)、GUI 工具界面、JavaScript 或 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 square

def 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)

🔎 示例运行结果:

明文: HELLO123
密钥: SECRET
密文: DXAGVFXGDAAFGX...

🧪 后续扩展建议

我可以为你提供:

  • ✅ 解密器(完整反向操作)

  • ✅ GUI 工具(用 tkinter 或 streamlit 实现)

  • ✅ JavaScript 版本(可嵌入网页)

  • ✅ 输出为表格(含加密矩阵可视化)

  • ✅ 你可输入自定义密钥 & 明文直接运行


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

古典密码之棋盘密码(ADFGVX,ADFGX,Polybius) - 菜鸟-创作你的创作

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐