一起学加密(第一期)——基本术语和凯撒密码
最近打算挖个坑(挖了坑才有动力坚持),和大家聊一下加密相关的一些技术。当然也是一起学习,因为自己也想趁着这个机会,把学过的没学过的都理一遍,总结一下。
想聊的内容很多,打算从最基础的开始,包括一些最简单的加密算法,并且会尽量和 Python 结合,能给出一些演示。当然我们的重点最后肯定是非对称加密,重点要聊的内容会是SSL,HTTPS,前面都是一些预热。
今天是第一期,我们主要聊两个话题:
•加密领域的几个最基本的术语•凯撒密码(Caesar cipher),最简单,也是历史有记录的最早的加密方法之一。
1.基本术语
再说基本术语之前,有两个英文单词先要搞清楚,因为很多时候和加密相关的资料都是英文的,这两个单词是肯定会遇到的:
•Cryptography•Cryptology
这两个单词一般都翻译成密码学,但前者更加倾向于加密技术的应用,而后者更加倾向于加密技术的研究,或者一门学科。作为程序员或者运维人员,平时实际上使用比较多的是Cryptography,因为 不管是SSL还是HTTPS,都是加密技术的应用。
明文和密文,加密和解密
•Plaintext 未经加密的消息,任何人都可以读•Ciphertext 加密后的消息,不可读•Key 密钥,用于加密和解密(核心是算法)
加密的方法
•对称加密 Symmetric Cryptography ,消息的发送者和接收者使用相同的key进行加密和解密•非对称加密 Asymmetric Cryptography (也叫 Public-key Cryptography ),消息的加密和解密使用不同的key
非对称加密不了解没有关系,后面我们会非常详细的介绍。
2.凯撒密码
维基百科解释
“是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。“
简单说就是字母表的平移,比如下图
把字母表平移三位的话(假如不区分大小写),
A -> D B -> E ...
比如凯撒要对其将军下达攻击ATTACK的命令,那么根据凯撒密码加密,加密后的密文为DWWDFN
ATTACK -> DWWDFN
用Python实现凯撒加密
import stringdefgenerate_key(shift):
letters = string.ascii_letters[26:]
key ={}
num =0
for c in letters:
key[c]= letters[(num + shift)%len(letters)]
num +=1
return key
defencrypt(key, message):
cipher =""
for c in message:
if c in key:
cipher += key[c]
else:
cipher += c
return cipher
key = generate_key(3)
message ="ATTACK"
cipher = encrypt(key, message)
print(cipher)
generate_key 可以根据我们平移多少位,生成我们的密钥,就是一个字母对
shift=3 的话,密钥为
{'A':'D','B':'E','C':'F','D':'G','E':'H','F':'I','G':'J','H':'K','I':'L','J':'M','K':'N','L':'O','M':'P','N':'Q','O':'R','P':'S','Q':'T','R':'U','S':'V','T':'W','U':'X','V':'Y','W':'Z','X':'A','Y':'B','Z':'C'}查询密钥,就可以知道ATTACK的密文是DWWDFN
A -> D
T -> W
T -> W
A -> D
C -> F
K -> N用Python实现凯撒解密
解密非常简单,只要知道了shift是多少位,就可以生成一个用于解密的密钥,比如
def get_decryption_key(shift):
dkey ={}
letters =string.ascii_letters[26:]
num =0
for c in letters:
dkey[letters[(num + shift)% len(letters)]]= c
num +=1
return dkey有了解密的密钥,只要查询对应就能解开密码
{'D':'A','E':'B','F':'C','G':'D','H':'E','I':'F','J':'G','K':'H','L':'I','M':'J','N':'K','O':'L','P':'M','Q':'N','R':'O','S':'P','T':'Q','U':'R','V':'S','W':'T','X':'U','Y':'V','Z':'W','A':'X','B':'Y','C':'Z'}D -> A
W -> T
W -> T
D -> A
F -> C
N -> K凯撒密码的破解
很简单,暴力破解即可。
收到多次密文,然后从平移1-26,26种可能尝试,找出有意义的解密明文即可。