在工作项目中,我们接受用户的个人信息和类似账号密码此类数据时必须对其进行加密,否则可能会导致信息的泄露引发安全性问题。加密的方式有很多种,其中较为常用的加密方式是MD5加密算法和SHA-1加密算法,这两种算法中MD5较为常用。MD5用于确保信息传输完整一致,是一种计算机广泛使用的哈希算法,主流编程语言普遍已有MD5实现。
MD5算法
MD5是一种通过固定的算法将任意位长的数据转化为固定长度128位(16字节)长的加密算法。这种算法容易计算,从原数据得到MD5值是很容易操作的。而且对于极其相似两个的原数据,即使相差只有一位,最后得到的MD5加密结果都是有很大区别的。而且MD5具有很强的抗碰撞性,即使已知原数据和MD5的值想找到一个具有相同的MD5值的伪造数据也很困难。
但是随着MD5算法被破解,通过杂凑算法伪造数据的可能性也是有的。但这并不妨碍我们在电子商务领域对MD5算法的使用,只是当需要传输安全性要求极高的数据时需要采用加密程度更高、安全性更好的加密算法。普通的数据传输及个人信息和类似账号密码传输都可以使用MD5加密算法。
MD5算法加密原理
在进行JAVA实现前,我们有必要先了解MD5算法加密的原理,因为我们的目的并不是专门研究密码领域,所以这里仅简要的表述算法加密的原理,为我们使用java来实现加密做铺垫。
1.填充并处理原数据
MD5加密算法会将任意长度的数据转换为128位字串。在进行加密前的第一步要做的事将数据填充至512位(512位是四个128位)长度的倍数。无论数据是否是512位的倍数,我们都将其进行填充,直到总长度为:N*512