转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992
在我们的应用程序涉及到比较敏感的数据的时候,我们通常会对数据进行简单的加密。在与服务器之间的数据交互中,除了可以使用post请求来增强数据的安全性之外,我们可以使用常见的加密算法,对数据进行加密。今天主要介绍的是DES加密算法。
首先,DES属于一种对称的加密算法,所谓对称,就是说加密和解密使用的都是同一个密钥,那么在我们实际应用的时候,就是指服务器和客户端进行加密解密的时候,使用的是一个相同的密钥。除此之外,还有非对称加密算法,就是公钥私钥机制,这种方式可以被用来进行身份验证,这个以后再细说。
DES全称为Data EncryptionStandard,即数据加密标准,是一种使用密钥加密的块算法,DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
下面是在Java或者是Android里面,进行DES加密的代码实现
如果大家只是想用,就可以不用往下看了,下面开始说一些关于DES算法的细节。
在上面的加密和解密的方法里面,我们在获取Cipher实例的时候,传入了一个字符串"DES/CBC/PKCS5Padding",这三个参数是什么意思呢?
实际上,这三个参数分别对应的是“算法/模式/填充”,也就是说我们要用DES算法进行加密,采用的是CBC模式,填充方式采用PKCS5Padding。
除了CBC模式,还有ECB模式等,指的是不同的加密方式。
那么CBC模式和ECB模式又有什么区别呢?
ECB模式指的是电子密码本模式,是一种最古老,最简单的模式,将加密的数据分成若干组,每组的大小跟加密密钥长度相同;然后每组都用相同的密钥加密, 比如DES算法, 如果最后一个分组长度不够64位,要补齐64位。这种模式的特点是:
1.每次Key、明文、密文的长度都必须是64位;
2.数据块重复排序不需要检测;
3.相同的明文块(使用相同的密钥)产生相同的密文块,容易遭受字典攻击;
4.一个错误仅仅会对一个密文块产生影响;
CBC模式指的是加密块链模式,与ECB模式最大的不同是加入了初始向量。下面的代码就是获取一个初始向量,
IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());
这种模式的特点是:
1.每次加密的密文长度为64位(8个字节);
2.当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文;
3.密文块要依赖以前的操作结果,所以,密文块不能进行重新排列;
4.可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击;
5.一个错误发生以后,当前和以后的密文都会被影响;
PKCS5Padding参数则是在说明当数据位数不足的时候要采用的数据补齐方式,也可以叫做数据填充方式。
PKCS5Padding这种填充方式,具体来说就是“填充的数字代表所填字节的总数”
比如说,差两个字节,就是######22,差5个字节就是###55555,这样根据最后一个自己就可以知道填充的数字和数量。
介绍完DES的这些细节之后,我们就可以知道,在不同的平台上,只要能保证这几个参数的一致,就可以实现加密和解密的一致性。
1.加密和解密的密钥一致
2.采用CBC模式的时候,要保证初始向量一致
3.采用相同的填充模式