目录
本项目是对最为经典的几种密码学算法作介绍与python编程实现,对于其中几种较为简单的加密算法,加入了破解程序。本人是该领域初学者,所以本篇文章也仅仅是浅尝辄止。本人并不奢望读者可以通过本文学到非常多的相关知识,意图在于用尽可能简单的流程引导跟我类似的初学者了解密码学的经典算法并激发学习欲望。
本文的绝大部分参考程序来自于作者Al Sweigart的书籍《Python密码学编程》,想深入学习了解的读者可以购买查阅此书,对本文中的代码感兴趣的读者也可查阅此书或私信我~
一、凯撒密码的实现及破解
(一)凯撒密码简要介绍
凯撒密码是最早的代换密码,使用单表代换。其基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。其作为最早的置换密码之一,原理已被广泛理解,且常作为教学的入门密码学案例。在现代,凯撒密码主要用于教育目的,很少用于实际安全应用,因为其易于通过暴力破解、频率分析等方法被破解。
(二)实现过程关键代码实现
在Python中,可以通过字符在26字母表中的索引进行转换,加上偏移量后再将其转换回字符,实现简单的凯撒密码加密和解密。
(三)破解过程关键代码实现
破解脚本则通过尝试所有可能的密钥和检测结果的方法,尝试找到正确的密钥来解密信息。如果输出结果有可读的英文明文,则说明可能找到了正确的密钥。
二、维吉尼亚密码的实现及破解
(一)维吉尼亚密码简要介绍
维吉尼亚密码是一种使用一串密钥词进行加密的方法。每个字母的偏移量由密钥词中相对应位置的字母决定。这种密码相较于单一偏移的凯撒密码提供了更高的安全性。见下图, 如果我们使用“PIZZA”作为维吉尼亚密钥,那么第1个子密钥是P,第2个子密钥是I,第3和4个子密钥都是Z,第5个子密钥是A。我们将使用第1个来加密明文的第1个字母,使用第2个密钥来加密第2个字母,如此类推。当我们到达明文的第6个字母时,我们将回过头来使用第1个子密钥。