beaufort_cipher 博福特密码(古典密码)

beaufort_cipher 博福特密码(古典密码)

概念

博福特密码,是一种类似于维吉尼亚密码的替代密码,由弗朗西斯·蒲福(Francis Beaufort)发明。它最知名的应用是M-209密码机。博福特密码属于对等加密,即加密演算法与解密演算法相同

博福特密码是按mod q减法运算的一种周期代替密码,其博福特密码表如下

![jpg](beaufort_cipher_files/beaufort_cipher_1_1.jpg)

与维吉尼亚密码表相比,就第二列开始的字母排序不一致

示例

例如,明文的第一个字母为D,则先在表格中找到第D列。由于密钥的第一个字母为F,于是D列从上往下找到F。这一F对应的行号为C,因而C便是密文的第一个字母。以此类推可以得到密文。以下便是一个密钥为FORTIFICATION时的例子:

Key: FORTIFICATION

明文:DEFENDTHEEASTWALLOFTHECASTLE

密钥:FORTIFICATIONFORTIFICATIONFO

密文:CKMPVCPVWPIWUJOGIUAPVWRIWUUK

算法

代码

[beaufort_cipher.py]{..\src\ciphers\beaufort_cipher.py}

"""
Prepare
   1. sys.path 中增加 TheAlgorithms\src 子模块

"""
import sys
sys.path.append('E:\dev\AI\TheAlgorithms\src')

案例一:

Key: FORTIFICATION

明文:DEFENDTHEEASTWALLOFTHECASTLE

密钥:FORTIFICATIONFORTIFICATIONFO

密文:CKMPVCPVWPIWUJOGIUAPVWRIWUUK

from ciphers.beaufort_cipher import generate_key,cipher_text,original_text
"""
    
"""
message = "DEFENDTHEEASTWALLOFTHECASTLE"
key = "FORTIFICATION"
key_new = generate_key(message, key)
# key_new = "FORTIFICATION"
s = cipher_text(message, key_new)
print(f"Encrypted Text = {s}")
print(f"Original Text = {original_text(s, key_new)}")

Encrypted Text = YQOLFYLFELSEGRMUSGALFEJSEGGQ
Original Text = DEFENDTHEEASTWALLOFTHECASTLE

案例二:

注意:key_new = generate_key(message, key)
与message ,key 有关

from ciphers.beaufort_cipher import generate_key,cipher_text,original_text
"""
    
"""
message = "THE GERMAN ATTACK"
key = "SECRET"
key_new = generate_key(message, key)
s = cipher_text(message, key_new)
print(f"Encrypted Text = {s}")
print(f"Original Text = {original_text(s, key_new)}")
Encrypted Text = BDC PAYUWL JPAIYI
Original Text = THE GERMAN ATTACK

posted @ 2021-06-21 11:03  IT88老兵  阅读(732)  评论(0编辑  收藏  举报