Gronsfeld 密码示例和教程

通过互动示例、逐步演示和动手练习了解 Gronsfeld 密码的工作原理。非常适合初学者和 CTF 爱好者。

Gronsfeld Cipher Examples

Learn how the Gronsfeld cipher works through interactive examples. This cipher uses numeric keys (0-9) instead of alphabetic keys, making it a simplified variant of the Vigenere cipher.

HELLO
314
H
+3
?
E
+1
?
L
+4
?
L
+3
?
O
+1
?
KFPOP

Encryption Formula

C = (P + K) mod 26

Where P is plaintext position, K is key digit (0-9)

Practice Challenge

Try decrypting this message with the key 2718:

JGNQG YQTNF
Show Answer
HELLO WORLD

Key Takeaways

  • 1.Gronsfeld uses numeric keys (0-9), making it easier to remember than alphabetic keys
  • 2.Each digit represents a Caesar shift (0 = no shift, 9 = shift 9 positions)
  • 3.The key repeats cyclically through the entire message
  • 4.Smaller key space (10 options vs 26) makes it more vulnerable to brute force

格朗斯费尔德密码示例与教程

本综合指南提供了格朗斯费尔德密码加密与解密的分步示例。无论您是在备战 CTF 竞赛、学习古典密码学,还是仅仅对历史加密方法感到好奇,这些示例都将帮助您掌握格朗斯费尔德密码。

基础加密示例

示例 1:使用密钥 "314" 加密简单消息

明文: HELLO 密钥: 314

逐步加密过程:

字母位置密钥数字计算结果
H73(7+3) mod 26 = 10K
E41(4+1) mod 26 = 5F
L114(11+4) mod 26 = 15P
L113(11+3) mod 26 = 14O
O141(14+1) mod 26 = 15P

密文: KFPOP

注意密钥 "314" 在加密每个字母时如何循环重复(3、1、4、3、1、……)。

示例 2:使用密钥 "2718" 加密较长消息

明文: ATTACK AT DAWN 密钥: 2718

字母位置密钥计算结果
A02(0+2) mod 26 = 2C
T197(19+7) mod 26 = 0A
T191(19+1) mod 26 = 20U
A08(0+8) mod 26 = 8I
C22(2+2) mod 26 = 4E
K107(10+7) mod 26 = 17R
(空格)--保持不变(空格)
A01(0+1) mod 26 = 1B
T198(19+8) mod 26 = 1B
(空格)--保持不变(空格)
D32(3+2) mod 26 = 5F
A07(0+7) mod 26 = 7H
W221(22+1) mod 26 = 23X
N138(13+8) mod 26 = 21V

密文: CAUIER BB FHXV

解密示例

示例 3:已知密钥解密

密文: KFPOP 密钥: 314

解密过程(逆转加密步骤):

字母位置密钥计算结果
K103(10-3+26) mod 26 = 7H
F51(5-1+26) mod 26 = 4E
P154(15-4+26) mod 26 = 11L
O143(14-3+26) mod 26 = 11L
P151(15-1+26) mod 26 = 14O

明文: HELLO

示例 4:处理环绕情况

当解密结果出现负数时,在取模之前先加 26:

密文: BCD 密钥: 543

字母位置密钥计算结果
B15(1-5+26) mod 26 = 22W
C24(2-4+26) mod 26 = 24Y
D33(3-3+26) mod 26 = 0A

明文: WYA

练习挑战

在查看答案之前,请尝试自行解密以下消息:

挑战 1:简单

密文: LIPPS 密钥: 314 提示: 一句常见的问候语

挑战 2:中等

密文: WKUHH EOLQG PLFH 密钥: 314 提示: 一首童谣的引用

挑战 3:高级

密文: GSRH RH Z HVXIVG NVHHZTV 密钥: 未知(尝试暴力破解!) 提示: 密钥是单个重复的数字

历史背景

为什么选择数字密钥?

格朗斯费尔德伯爵在 17 世纪为军事野战使用设计了这种密码。数字密钥具有几个实际优势:

  1. 易记性:日期或部队编号等数字更容易记忆
  2. 传递性:在战场条件下,数字密钥能更可靠地传递
  3. 简便性:士兵只需极少的培训即可正确使用该密码
  4. 减少错误:数字种类更少(0-9)意味着加密出错的可能性更小

历史上的密钥选择

历史使用者通常选择有意义的数字密钥:

  • 日期:重要日期,如 1648(威斯特伐利亚和约签署年)
  • 数学常数:早期数学家可能使用 314159(圆周率)
  • 部队编号:军事部队可能使用其团的编号
  • 个人数字:出生年份或其他重要的个人日期

Python 实现

以下是一个用于学习目的的简单 Python 实现:

def gronsfeld_encrypt(plaintext, key):
    result = []
    key_index = 0

    for char in plaintext.upper():
        if char.isalpha():
            shift = int(key[key_index % len(key)])
            encrypted = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
            result.append(encrypted)
            key_index += 1
        else:
            result.append(char)

    return ''.join(result)

def gronsfeld_decrypt(ciphertext, key):
    result = []
    key_index = 0

    for char in ciphertext.upper():
        if char.isalpha():
            shift = int(key[key_index % len(key)])
            decrypted = chr((ord(char) - ord('A') - shift + 26) % 26 + ord('A'))
            result.append(decrypted)
            key_index += 1
        else:
            result.append(char)

    return ''.join(result)

# 示例用法
print(gronsfeld_encrypt("HELLO", "314"))  # 输出:KFPOP
print(gronsfeld_decrypt("KFPOP", "314"))  # 输出:HELLO

常见错误及避免方法

错误 1:忘记密钥循环

密钥会持续循环重复。不要在单词边界或空格处重新开始密钥。

错误做法: 对第一个单词使用 314,然后对第二个单词重新从 3 开始 正确做法: 在整个消息中连续使用密钥序列

错误 2:将非字母字符计入密钥位置

非字母字符(空格、标点)不应推进密钥位置。

错误做法: 对包括空格在内的每个字符都推进密钥位置 正确做法: 只对字母 A-Z 推进密钥位置

错误 3:模运算方向错误

解密时要减去密钥数字,而不是相加。并且在取模之前始终加 26,以处理负数结果。

错误做法: (C - K) mod 26(可能产生负数结果) 正确做法: (C - K + 26) mod 26

挑战答案

挑战 1 答案

密文: LIPPS → 明文: HELLO

挑战 2 答案

密文: WKUHH EOLQG PLFH → 明文: THREE BLIND MICE

挑战 3 答案

密钥: 4(重复) 明文: COMP THIS IS A SECRET MESSAGE(如果使用密钥 4)

注意:根据实际密钥的不同,结果可能有所差异。使用我们的格朗斯费尔德解码器尝试不同的密钥。

相关资源

总结

格朗斯费尔德密码展示了多表替换加密的工作原理,同时比完整的维吉尼亚密码更易于学习。通过这些示例,您已经学会了:

  1. 如何通过将密钥数字与字母位置相加来加密消息
  2. 如何通过减去密钥数字(并正确处理环绕情况)来解密
  3. 为什么数字密钥在历史军事应用中具有实用价值
  4. 使用格朗斯费尔德加密时需要避免的常见错误

使用我们的交互工具进行练习,以巩固这些概念并提升您的密码分析技能!