实现 Atbash 密码
定义: Atbash 密码是一种替换密码,只有一个特定的密钥,其中所有字母都颠倒了,即A 到 Z和Z 到 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 并通过反转字母来解密消息。