BASE64编码算法不算是真正的加密算法。
MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,咱们称之为单向加密算法。咱们一般只把他们做为加密的基础。单纯的以上三种的加密并不可靠。
BASE64
按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常见于邮件、http加密,截取http信息,你就会发现登陆操做的用户名、密码字段经过BASE64加密的。
经过java代码实现以下:
java
主要就是BASE64Encoder、BASE64Decoder两个类,咱们只须要知道使用对应的方法便可。另,BASE加密后产生的字节位数是8的倍数,若是不够位数以=符号填充。
MD5
MD5 -- message-digest algorithm 5 (信息-摘要算法)缩写,普遍用于加密和解密技术,经常使用于文件校验。校验?无论文件多大,通过MD5后都能生成惟一的MD5值。比如如今的ISO校验,都是MD5校验。怎么用?固然是把ISO通过MD5后产生MD5的值。通常下载linux-ISO的朋友都见过下载连接旁边放着MD5的串。就是用来验证文件是否一致的。
经过java代码实现以下:
linux
一般咱们不直接使用上述MD5加密。一般将MD5产生的字节数组交给BASE64再加密一把,获得相应的字符串。
SHA
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被普遍地应用于电子商务等信息安全领域。虽然,SHA与MD5经过碰撞法都被破解了, 可是SHA仍然是公认的安全加密算法,较之MD5更为安全。
经过java代码实现以下:
算法
HMAC
HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值做为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,而后传输。接收方利用与发送方共享的密钥进行鉴别认证等。
经过java代码实现以下:
数组
给出一个完整类,以下:
安全
再给出一个测试类:
函数
控制台输出:
工具
BASE64的加密解密是双向的,能够求反解。
MD五、SHA以及HMAC是单向加密,任何数据加密后只会产生惟一的一个加密串,一般用来校验数据在传输过程当中是否被修改。其中HMAC算法有一个密钥,加强了数据传输过程当中的安全性,强化了算法外的不可控因素。
单向加密的用途主要是为了校验数据在传输过程当中是否被修改。测试