凯撒加密法
所谓凯撒加密是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
明:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
message = 'hello world! Nice to meet you.'
key = 13
mode = 'encrypt' # encrypt or decrypt 选择加密或解密
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
translated = ''
message = message.upper() #字母转为大写
for symbol in message:
if symbol in letters:
num = letters.find(symbol)
if mode == 'encrypt':
num = num + key
elif mode == 'decrypt':
num = num - key
if num >= len(letters):
num = num - len(letters)
elif num < 0:
num = num + len(letters)
translated = translated + letters[num]
else:
translated = translated + symbol
print(translated)
首先创建了一个名为letters的字符集,然后将需要加密的内容按照字符集中的顺序偏移进行加密。如:
H在字符集中是第7位(从0开始数)偏移13位(密匙)则是U(第20位)
O在字符集中是第14位偏移13位则是27位,但是字符集只有26位,便减去26等于1(B)
明文字母 | 明文数字 | 密匙 | 结果 | 密文字母 |
---|---|---|---|---|
H | 7 | 13 | 20 | 20=U |
E | 4 | 13 | 17 | 17=R |
L | 11 | 13 | 24 | 24=Y |
L | 11 | 13 | 24 | 24=Y |
O | 14 | 13 | 27>26 | 27-26=1=B |
所以最后的结果为:URYYB JBEYQ! AVPR GB ZRRG LBH.
解密的方法也是如此,若所得的结果小于0时,则相应的加上26。
暴力破解
message =