0x01 引言
我们都知道,在当今社会,为了保证无论是我们的数据还是我们的财产的安全,我们总是会在做一些事情的时候校验我们的密码,密码成为了我们身边无处不在却又不可缺失的一部分。
我们大多数人所知道的密码仅仅是一串自己所设置的一串数字、字母、字符罢了,实际上密码的定义远远不止如此。
密码专业的定义是这样的:密码是一种用来混淆的技术,使用者希望将正常的(可识别的)信息转变为无法识别的信息。但这种无法识别的信息部分是可以再加工并恢复和破解的。密码在中文里是“口令”(password)的通称。
其中提到了密码是一种用来混淆的技术,将不愿意别人轻易识别的内容进行转变,将其变得难以辨别。
我们如今能够接触到的银行的加密系统、社交软件密码登陆系统等无一不是将你的个人信息通过只有你自己知道的口令进行加密处理的。我们也知道在发送信息时,如果像古人一样,将书信直接递交出去,那么在中途被人截获信息就不好了,所以我们在使用QQ等一系列工具进行交流时,软件也会将我们发送的信息进行加密处理。
我们在日常生活中经常会遇到一种加密,就是我提前告知某人,我某个动作的意思,比如说我吹口哨就意味着行动开始了,这也是一种暗号,这种在广泛意义上已经称作为了加密处理。
所以,我们引入古典密码这个概念,因为古典密码正是基于置换和代换所产生的。
0x02 古典密码史
古典密码(classical cryptography)
把明文中的字母重新排列,字母本身不变,但其位置改变了,这样编成的密码称为置换密码。最简单的置换密码是把明文中的字母顺序倒过来,然后截成固定长度的字母组作为密文。
古典密码的产生是在很久很久以前了,其发展历程大致分为三个阶段:
1、 古典密码阶段(1949年前)
在这个阶段算法和秘钥都是保密的,秘钥空间较小,信息的安全性主要依赖于对于加密和解密算法的保密。
2、 对称密码阶段(1949-1975年)
在这之后就进入到了现代密码学的阶段,和古典密码阶段的主要区别在于这个阶段的加密和解密算法无需保密,信息的安全性主要依赖于对秘钥的保密。需要解决的主要问题是在不可信信道下的秘钥传输问题。
3、 公钥密码阶段(1976年-至今)
在公钥密码阶段,加密秘钥(公钥)可以公开,仅对解密秘钥(私钥)保密,基于一些数学难题保证很难通过公钥推出私钥。
我们今天将会给大家介绍几种常见的古典密码加密和解密的方式,当然这些密码也是比较出名的。
0x03 经典示例
首先我们来介绍最为简单的编码型密码。
Base64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应4个base64单元,即3个字节可表示4个可打印字符。它可用来作为电子邮件的传输编码。在base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同系统中而不同。
例如:编码‘Man'
在此例中,base64算法将3个字符编码转为4个字符
base64索引表:
如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:
先使用0字节值在末尾补足,使其能够被3整除,然后再进行base64的编码。在编码后的base64文本后加上一个或两个“=”号,代表补足的字节数。
也就是说,当最后剩余一个八位字节(一个byte)时,最后6位的base64字节块有四位是0值,最后附加上两个等号;如果最后剩余两个八位字节(2byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号
例如:
当看到==号的加密方式时,可以考虑base64。例:cTZ1NQ==解码之后为q5u5。
我们再看看替换型密码
凯撒密码
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。现今又叫“移位密码”,只不过移动的位数不一定是3位而已。
下面我们总结一下:
明密对照表:
明文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文:TUVWXYZABCDEFGHIJKLMNOPQRS
注:广义上的凯撒是位移的。
凯撒是没有密匙的,即使没有密匙也能将它破解出来,因为凯撒移位密码只有25种密匙,最多就是将这25种可能性挨个检测一下可以了,这就是我们所说的暴力破解法。也可在用软件破解,不过我提倡用人工的。
这里给出在线凯撒密码解密网址:
https://www.qqxiuzi.cn/bianma/kaisamima.php
当然还有分组型密码
栅栏密码
栅栏密码(Rail-fence Cipher)就是把要加密的明文分成N个一组,然后把每组的第1个字符组合,每组第2个字符组合…每组的第N(最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文,这里以2栏栅栏加密为例。
明文:The quick brown fox jumps over the lazy dog
去空格:Thequickbrownfoxjumpsoverthelazydog
分组:Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g
第一组:Teucbonojmsvrhlzdg
第二组:hqikrwfxupoeteayo
密文:Teucbonojmsvrhlzdghqikrwfxupoeteayo
例:
一只小羊翻过了2个栅栏KYsd3js2E{a2jda}解密后为KEY{sad23jjdsa2}
这里提供一个在线解栅栏密码的地址:
http://www.practicalcryptography.com/ciphers/classical-era/rail-fence/
还有我们众所周知的摩尔斯电码也是一种密码
摩斯密码
摩尔斯电码(英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人艾尔菲德·维尔(Alfred Lewis Vail)与萨缪尔·摩尔斯(Samuel Finley Breese Morse)在1836年发明。摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:
1.点(.)
2.划(-)
3.每个字符间短的停顿(在点和划之间的停顿)
4.每个词之间中等的停顿
5.以及句子之间长的停顿
摩尔斯电码字母与数字对应表:
例如:
原文本:I LOVE YOU TOO
加密后:../.-../---/...-/./-.--/---/..-/-/---/---
其实古典密码的世界很丰富,上面只是给大家介绍了3种最常规和基础的密码,以便大家对古典密码有一个初步的认识,我们在后续也会给大家带来更多的古典密码学介绍的。谢谢大家的阅读。