实现Atbash密码
阿特巴什密码是一种替代密码,在这种密码中,我们可以在一个密码钥匙的帮助下,将所有字母的顺序颠倒过来。我们可以将A-Z的顺序改为Z-A。它被用来将字母表编码成希伯来字母表。
与Affine的关系
Atbash密码是Affine密码的一部分,在其中使用了两个密钥。在Affine密码中,a=25,b=25。
算法
Atibash密码中使用的密钥如下。
A B C D E F G H I J K L M N O P Q R S T U V W XY Z
Z Y X W V U T S R Q P O N M LK J I H G F E D C B A
加密
为了加密信息,我们需要从上面的字母中选择一个词。然后,我们必须用下面的字母替换该字母。假设我们有一个词 “JAVATPOINT”,这个词的第一个字母是J,可以用Q代替,第二个字母是A,可以用Z代替,这个词的第三个字母是V,可以用E代替,字母T可以用G代替,字母P可以用L代替,字母O可以用M代替,字母I可以用R代替。字母N可以用M代替。整个信息可以被加密如下。
JAVATPOINT
QZEZGKLRMG
解密
同样,如果我们想解密 “QZEZGKLRMG “的信息,可以按照上述步骤进行。字母Q可以用J代替,字母Z可以用A代替,字母E可以用V代替,字母G可以用T代替,字母K可以用P代替,字母L可以用O代替,字母R可以用I代替,字母M可以用N代替,整个信息可以被解密如下。
QZEZGKLRMG
JAVATPOINT
方法
在这里,我们可以在密钥值的帮助下对每个元素进行映射操作。它在字典中寻找这一对,在上述系列的帮助下,加密和解密过程就发生了。
示例:
# 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 = 'JAVATPOINT'
print(atbash(message.upper()))
#decrypt the given message
message = 'QZEZGKLRMG'
print(atbash(message.upper()))
# Executes the main function
if __name__ == '__main__':
main()
输出:
QZEZGKLRMG
JAVATPOINT
Atbash密码的优点
Atbash密码同时具有a=25和b=25。所以我们不需要为加密和解密写不同的函数。因此,我们可以在加密和解密中重复使用同一个函数。
它有一个恒定的密钥,是最容易被破解的密码,几乎不提供任何安全性。任何人都可以认为它是Atbash,并通过颠倒字母来解密信息。