一般单表替代密码的原理是以26个英文字母集合上的一个置换π为密钥,对明文消息中的每个字母依次进行变换。
可描述为:明文空间M和密文空间C都是26个英文字母的集合,密钥空间K={π:Z26→Z26|π是置换},是所有可能置换的集合。
对任意π∈K,定义:
加密变换:eπ(m)=π(m)=c
解密变换:dπ© = π-1©=m, π-1是π的逆置换。
单表代替是密码学中最基础的一种加密方式。在加密时用一张自制字母表上的字母来代替明文上的字母(比如说A——Z,B——D)来达到加密。移位密码也属于单表代替,只不过比较有规律,相当于集体向前或向后。
# 字母表
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
# 替代表
REPLACE = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba'
# 加密
def encryption():
message = input("input message:")
password = ''
for i in message:
if i in LETTERS:
num = LETTERS.find(i)
password += REPLACE[num]
else:
password += i
print("password:"+password)
#解密
def decryption():
password = input("input password:")
message = ''
for j in password:
if j in REPLACE:
num = REPLACE.find(j)
message += LETTERS[num]
else:
message += j
print("message:"+message)
while True:
print (u"1. encryption")
print(u"2. decryption")
choice = int(input("please input choice:"))
if choice == 1:
encryption()
elif choice == 2:
decryption()
else: print (u"Your input is wrong!")