凯撒密码
# 模块安装
pip install pycipher
from pycipher import Caesar
plaintext = Caesar(3).decipher(ciphertext)
ciphertext = Caesar(3).encipher(plaintext)
摩斯密码
# 模块安装
pip install morse-talk
import morse_talk as mtalk
# Encoding in morse
>>> mtalk.encode('Alpha Ranger 45 departed')
'.- .-.. .--. .... .- .-. .- -. --. . .-. ....- ..... -.. . .--. .- .-. - . -..'
# Encoding using binary pattern
>>> mtalk.encode('Alpha Ranger 45 knocked down', encoding_type='binary')
'101110001011101010001011101110100010101010001011100000001011101000101110001110100011101110100010001011101000000010101010111000101010101000000011101011100011101000111011101110001110101110100011101011100010001110101000000011101010001110111011100010111011100011101'
# Decoding a code encoded in morse
>>> code = '-... --- -- -... -..- .--. --'
>>> mtalk.decode(code)
'BOMB X PM'
# Decoding a binary pattern
>>> s_bin = mtalk.encode('Alpha Ranger 45 knocked down', encoding_type='binary')
>>> mtalk.decode(s_bin, encoding_type='binary')
'ALPHA RANGER 45 KNOCKED DOWN'
栅栏密码
from pycipher import Railfence
print Railfence(4).encipher('HELLOWORLD')
print Railfence(4).decipher('HOEWRLOLLD')
Vigenere
from pycipher import Vigenere
print Vigenere('CULTURE').encipher('helloworld')
print Vigenere('CULTURE').decipher('jyweinstfo')
Gronsfeld
from pycipher import Gronsfeld
print Gronsfeld([2,20,11,19,20,17,4]).encipher('helloworld')
print Gronsfeld([2,20,11,19,20,17,4]).decipher('jyweinstfo')
培根密码
# Python program to implement Baconian cipher
'''This script uses a dictionary instead of 'chr()' & 'ord()' function'''
'''
Dictionary to map plaintext with ciphertext
(key:value) => (plaintext:ciphertext)
This script uses the 26 letter baconian cipher
in which I, J & U, V have distinct patterns
'''
lookup = {'A':'aaaaa', 'B':'aaaab', 'C':'aaaba', 'D':'aaabb', 'E':'aabaa',
'F':'aabab', 'G':'aabba', 'H':'aabbb', 'I':'abaaa', 'J':'abaab',
'K':'ababa', 'L':'ababb', 'M':'abbaa', 'N':'abbab', 'O':'abbba',
'P':'abbbb', 'Q':'baaaa', 'R':'baaab', 'S':'baaba', 'T':'baabb',
'U':'babaa', 'V':'babab', 'W':'babba', 'X':'babbb', 'Y':'bbaaa', 'Z':'bbaab'}
# Function to encrypt the string according to the cipher provided
def encrypt(message):
cipher = ''
for letter in message:
# checks for space
if(letter != ' '):
# adds the ciphertext corresponding to the
# plaintext from the dictionary
cipher += lookup[letter]
else:
# adds space
cipher += ' '
return cipher
# Function to decrypt the string
# according to the cipher provided
def decrypt(message):
decipher = ''
i = 0
# emulating a do-while loop
while True :
# condition to run decryption till
# the last set of ciphertext
if(i < len(message)-4):
# extracting a set of ciphertext
# from the message
substr = message[i:i + 5]
# checking for space as the first
# character of the substring
if(substr[0] != ' '):
'''
This statement gets us the key(plaintext) using the values(ciphertext)
Just the reverse of what we were doing in encrypt function
'''
decipher += list(lookup.keys())[list(lookup.values()).index(substr)]
i += 5 # to get the next set of ciphertext
else:
# adds space
decipher += ' '
i += 1 # index next to the space
else:
break # emulating a do-while loop
return decipher
def main():
message = "hello world"
result = encrypt(message.upper())
print (result)
message = "AABBBAABAAABABBABABBABBBABABBAABBBABAAABABABBAAABB"
result = decrypt(message.lower())
print (result)
#Executes the main function
if __name__ == '__main__':
main()
福博特密码
from pycipher import Beaufort
print Beaufort('CULTURE').encipher('HELLOWORLD')
print Beaufort('CULTURE').decipher('VQAIGVQLJI')
列移位密码
from pycipher import ColTrans
print ColTrans("HELLO").encipher('HELLOWORLD')
print ColTrans("HELLO").decipher('EOHWLRLLOD')