关于加密那点事(二)

先说几个并不复杂的加密方式:

1、偏移

偏移是针每个字节的内容,增加一定的偏移,如原来的值是0x101112,我们每个字节加5,得到0x151617,这样的内容就和原来的内容不一样,就形成了一种偏移。而解密就是简单的转换回来就好。而如果为每个字节指定不同的偏移,把这些偏移当成密钥,按上面的算法,就会得到一个更加难以破解的密文了。这种是中国古代军事上使用的最古老的一种加密方式。

2、字典

我们为每个值指定一个另外的编码,打乱原来的编码顺序,就可以形成一个密文字典。谍战片中的密码本就是这么一个东西,将原始的内容换算成字典中对应的编码,破解时,再反向换算回去。

3、加扰动

又是古人的智慧。古人通过将原文通过某种方式藏到一段文字中来隐藏原始内容,最简单的如藏头诗,相信大家都知道。通过添加无用信息,来隐藏正常的原文阅读,高级点的加入动后又自成体系,能够让人读懂(当然不是原意)。

4、位非

我们知道位非是一种简单的位运算,一个值位非后的值,再次位非就会还原会原值。当然这种加密在计算机里算是最粗陋的一种了,因为它不需要密钥,也没有密钥,所以算法也最简单,速度也最快,最容易实现。

5、异或

异或是另一种神奇的位运算,现代计算机加密算法基本上都是基于异或这一特性实现的。一个值与另一个值异或后,与第二个值再次异或,得到的结果就是第一个值。

好了,这几个加密方式说完了。所谓万变不离其宗,那么我们看现代的计算机加密也逃不出这些简单的基础,都是对原始的内容与加密的密钥进行一定的运算得到密文,再对密文的内容与解密的密钥进行一定的运算得到原文。注意一点,我们一般认为加密和解密是同一个密钥,但实际上这两个可能是不同的值,这就是非对称加密的来源。比如我们知道数学上一个简单的东西,一元二次方程一般有两个解,也就是说让这个方程成立,我们可以有两个数值对应,一个用于加密,一个用于解密即可。

一般的加密,为了让加密的密文更加的秘密,会加入一些干扰算法,如AES的CBC等加密算法,就是让前面的加密结果做为后面加密结果的一个初始向量来干扰最终的密文结果,增加破解难度。最终的密文受当前的原文、密码、前一加密结果三者的更同作用,从而造成缺失任意一段内容都无法完整解密的结果。

懂得了这些基本的理论,你就可以编写自己的加密算法了。我一向认为,标准的加密算法适合用于数据交换的场合,如果是自用,那么,对标准的加密算法,进行必要的变换,生成自己的加密算法是一种更好的加密。密不可宣才是真正的加密。

分享到: