📜  实现 Atbash 密码

📅  最后修改于: 2022-05-13 01:57:08.378000             🧑  作者: Mango

实现 Atbash 密码

定义: Atbash 密码是一种替换密码,只有一个特定的密钥,其中所有字母都颠倒了,即A 到 ZZ 到 A 。它最初用于对希伯来字母进行编码,但可以对其进行修改以对任何字母进行编码。

与仿射的关系: Atbash 密码可以被认为是仿射密码的一种特殊情况,其中两个密钥都是 25,即a = 25 & b = 25

阿特巴什键

算法: Atbash 算法中使用了以下密钥

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA

加密

要对消息进行加密,请在顶行中找到要加密的字母,然后将其替换为底行中的字母。
在下面的示例中,我们对消息“GEEKS FOR GEEKS”进行加密。我们要加密的第一个字母是'G',它在'T'之上,所以第一个密文字母是'T'。下一个字母是“E”,它在“V”之上,所以接下来是。整个消息被加密为:

GEEKS FOR GEEKS
TVVPH ULI TVVPH

解密

同样,如果我们想解密说“TVVPH ULI TVVPH”,我们会将第一个字母“T”替换为“G”。第二个字母“V”用“E”等等替换所有字母,包括最后一个“H”用“S”。解密的消息将是:

TVVPH ULI TVVPH
GEEKS FOR GEEKS

方法:在这里,每个元素的映射都是作为字典中的“键值”对完成的,然后在你想加密单个字符时将其用作查找表。

代码:

# Python program to implement Atbash Cipher
  
# This script uses dictionaries to lookup various alphabets
lookup_table = {'A' : 'Z', 'B' : 'Y', 'C' : 'X', 'D' : 'W', 'E' : 'V',
        'F' : 'U', 'G' : 'T', 'H' : 'S', 'I' : 'R', 'J' : 'Q',
        'K' : 'P', 'L' : 'O', 'M' : 'N', 'N' : 'M', 'O' : 'L',
        'P' : 'K', 'Q' : 'J', 'R' : 'I', 'S' : 'H', 'T' : 'G',
        'U' : 'F', 'V' : 'E', 'W' : 'D', 'X' : 'C', 'Y' : 'B', 'Z' : 'A'}
  
def atbash(message):
    cipher = ''
    for letter in message:
        # checks for space
        if(letter != ' '):
            #adds the corresponding letter from the lookup_table
            cipher += lookup_table[letter]
        else:
            # adds space
            cipher += ' '
  
    return cipher
  
# Driver function to run the program
def main():
    #encrypt the given message
    message = 'GEEKS FOR GEEKS'
    print(atbash(message.upper()))
      
    #decrypt the given message
    message = 'TVVPH ULI TVVPH'
    print(atbash(message.upper()))
  
  
# Executes the main function
if __name__ == '__main__':
    main()
Output:
TVVPH ULI TVVPH
GEEKS FOR GEEKS

优点:由于它只是一个具有 a = 25 = b 的仿射密码,我们不需要为加密和解密编写单独的函数。我们可以为这两个目的重复使用相同的函数。

分析:它有一个不变的密钥,它是最容易破解的密码,几乎不提供任何安全性。任何人都可以假设它是 atbash 并通过反转字母来解密消息。