您的位置 首页 java

Java中4大必学基本加密算法,了解一下?

MD5加密算法

MD5加密算法是Ron Rivest设计的一种单向散列函数,它以512位分组为单位处理输入明文(Plaintext)每个512位分组又分为16个32位子分组。算法的输出为4个级联的32位分组组成128位的散列值。 MD5 算法的初始化、主循环和尾部处理三个步骤如下:

  1. 初始化。算法初始化分为原始明文初始化和链接变量初始化两个部分。明文初始化首先将长度为L的待加密明文P后面级联一个字节0x80,再级联若干个0x00作为填充,使其长度为(516*K-64)位(K为正整数),接着再级联64位以字节计的明文长度。此时明文长度被填充为512位的整数倍,同时确保不同明文填充后不会相同。四个32位链接变量初始化为:A=0x1234567,B=0x789ABCDEF,C=0xFEDCBA98,D=0x76543210。这四个链接变量对于整个算法至关重要,其取值直接关系到配套设备软件的编写,务必将这四个链接变量写正确。

  2. 算法主循环。主循环次数为经过填充的明文数据位数除以512位所得的商K。将链接变量A、B、C、D分别赋给a、b、c、d四个变量。每次主循环都有四轮,每轮进行16次操作。每次操作先对a、b、c、d中的三个进行一次非线性函数运算,然后将所得结果依次加上第四个变量Mj(文本中的一个子分组)和一个 Ci (常数),将所得结果循环左移一个不定的常数S,然后再加上a、b、c、d其中之一,最后用该结果取代a、b、c、d其中之一。

  3. 尾部处理:每一次主循环全部完成之后,将A、B、C、D分别加上a、b、c、d,接着用下一个分组继续运行算法,最后的输出散列值是A、B、C、D的级联。定义非线性函数FF(a,b,c,d,S,Ci):a=b+[F(b,c,d)+Mj+Ci]<<其中S为循环左移的位数,为一常数,常数Ci为第i步中232*|sin(i)|的整数部分(i单位为弧度),四轮一共为64次,每一次的非线性函数都不相同。

java实现代码:

SHA 加密算法

SHA(Secure HashAlgorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务

等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了。但是SHA仍然是公认的安全加密算法,较之MD5更为安全。

java实现代码:

Base64加密算法

Base64就是一种基于64个可打印字符来表示二进制数据的表示方法。

因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。这时候Base64编码就应运而生。

java实现代码:

HMAC加密算法

HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

JAVA代码的实现:

总结

BASE64的加密解密是双向的,可以求反解。 MD5、SHA以及HMAC是单向加密,任何数据加密后只会产生唯一的一个加密串,通常用来校验数据在传输过程中是否被修改。其中HMAC算法有一个密钥,增强了数据传输过程中的安全性,强化了算法外的不可控因素。单向加密的用途主要是为了校验数据在传输过程中是否被修改。

文章来源:智云一二三科技

文章标题:Java中4大必学基本加密算法,了解一下?

文章地址:https://www.zhihuclub.com/169738.shtml

关于作者: 智云科技

热门文章

网站地图