随着科学技术的飞速发展,计算机已经渗透到了社会生活的各个方面,各种信息系统的建立和使用造成我们对计算机,尤其是对数据库和网络的事实上的依赖。由于数据库中存储的数据都是具有一定价值的信息,对这些信息的非法访问、窃取、篡改等行为必然导致计算机安全问题的出现。目前有许多保障数据安全的方式,其中加密方法就是其中的一种。

在网络通信中,加密是组织传输中的数据被窃取的最好方法,同时,通过数据的加脱密也可及时发现对数据的篡改,加密还是防止假冒和抵赖的主要方法。

加密算法通常分为两大类,如果密码体制的加密密钥等于解密密钥,或者由其中一个很容易推出另外一个,则成为传统密码体制。否则,称为非对称密码体制。

DES使用一个56 位的密钥以及附加的8 位奇偶校验位, 产生最大64 位的分组大小。这是一个迭代的分组密码,使用称为Feistel的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换,DES 使用16 个循环。

DES的常见变体是三重DES,使用168 位的密钥对资料进行三次加密的一种机制,它通常提供极其强大的安全性。如果三个56位的子元素相同,则三重DES 向后兼容DES。由于DES 是加(解)密64 位明(密)文,即为8 个字节(8*8=64),可以据此初步判断这是分组加密, 加密的过程中会有16 次循环与密钥置换过程,据此可以判断有可能是用到DES 密码算法,更精确的判断还得必须懂得一点DES 的加密过程。

RSA加密算法是一种非对称加密算法。依赖的数学难题是大素数乘积的分解问题。

1、公钥和私钥的产生
假设A 想要通过一个不可靠的媒体接收B 的一条私人讯息。她可以用以下的方式来产生一个公钥和一个密钥:

其中,e 是公钥,d 是私钥,d 是秘密的, 而N 是公众都知道的。A将她的公钥传给B,而将她的私钥藏起来。

2、加密消息
假设B 想给A 送一个消息m,他知道A 产生的N 和e。他使用起先与A 约好的格式将m 转换为一个小于N 的整数n, 比如他可以将每一个字转换为这个字的Unicode 码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n 加密:

c:n^e \equiv c\ (\mathrm{mod}\ N)

计算c 并不复杂,B 算出c 后就可以将它传递给A。

3、解密消息
A 得到B 的消息c 后就可以利用她的密钥d 来解码。可以用以下这个公式来将c 转换为n:

c^d \equiv n\ (\mathrm{mod}\ N)

得到n 后,可以将原来的信息m 重新复原,解码的原理如下:

c^d \equiv n^{e \cdot d}\ (\mathrm{mod}\ N)

4、签名消息
RSA 也可以用来为一个消息署名。假如阿红想给阿绿传递一个署名的消息的话,那么她可以为她的消息计算一个散列值,然后用她的密钥加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。阿绿获得这个消息后可以用阿黄的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有阿黄的密钥,以及这个消息在传播路径上没有被篡改过。

5、安全
假设偷听者阿紫获得了阿红的公钥N 和e 以及阿绿的加密消息c,但她无法直接获得阿黄的密钥d。要获得d,最简单的方法是从c 算出n,然后将N 分解为p 和q,这样她可以计算(p-1)(q-1)并从而由e推算出d。至今为止还没有人找到一个多项式时间的计算方法来分解一个大的整数的因子。