java sha_Java加密与解密:消息摘要算法SHA

SHA算法基于MD4算法基础之上,作为MD算法的继任者,成为新一代消息摘要算法的代表。SHA与MD算法不同之处主要在于摘要长度,SHA算法的摘要长度更长,安全性更高。

简述:

SHA(Secure Hash Algorithm,安全散列算法)是消息摘要算法的一种,被广泛认可的MD5算法的继任者。SHA算法家族目前共有SHA-0、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512五种算法,通常将后四种算法并称为SHA-2算法。

SHA算法发展:

SHA-0算法:SHA-0是在1993年发布的,但由于最后发现SHA-0算法中含有会降低密码安全性的错误被收回。

SHA-1算法:1995年,发布了SHA-1算法,通常我们把SHA-1算法简称为SHA算法。SHA-1算法在许多安全协定中广为使用,包括TLS/SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5算法的后继者。SHA-0和SHA-1算法可对最大长度为264的字节信息做摘要处理,得到一个160的摘要信息,其设计原理相似于MD4和MD5算法。如果将得到160位的摘要信息换算成十六进制,可以得到一个40位的字符串。

SHA-2算法:SHA算法家族除了其代表SHA-1算法以外,还有SHA-224、SHA-256、SHA-384和SHA-512四种SHA算法的变体,以其摘要信息字节长度不同而命名,通常将这组算法并称为SHA-2算法。摘要信息字节长度的差异是SHA-2和SHA-1算法的最大差异。

e2465a9a97ce75648b30c6d5bfa7fd3a.png

实现:

MessageDigest类支持MD算法的同时也支持SHA算法,几乎涵盖了我们所知的全部SHA系列算法,主要包含SHA-1、SHA-256、SHA-384、SHA-512四种算法。

package com.code;import java.security.MessageDigest;import javax.xml.bind.annotation.adapters.HexBinaryAdapter;public class SHACoder {/** * SHA-1消息摘要算法 */ public static String encodeSHA(byte[] data) throws Exception { // 初始化MessageDigest,SHA即SHA-1的简称 MessageDigest md = MessageDigest.getInstance("SHA"); // 执行摘要方法 byte[] digest = md.digest(data); return new HexBinaryAdapter().marshal(digest); } /** * SHA-256消息摘要算法 */ public static String encodeSHA256(byte[] data) throws Exception { // 初始化MessageDigest,SHA即SHA-1的简称 MessageDigest md = MessageDigest.getInstance("SHA-256"); // 执行摘要方法 byte[] digest = md.digest(data); return new HexBinaryAdapter().marshal(digest); } /** * SHA-384消息摘要算法 */ public static String encodeSHA384(byte[] data) throws Exception { // 初始化MessageDigest,SHA即SHA-1的简称 MessageDigest md = MessageDigest.getInstance("SHA-384"); // 执行摘要方法 byte[] digest = md.digest(data); return new HexBinaryAdapter().marshal(digest); } /** * SHA-512消息摘要算法 */ public static String encodeSHA512(byte[] data) throws Exception { // 初始化MessageDigest,SHA即SHA-1的简称 MessageDigest md = MessageDigest.getInstance("SHA-512"); // 执行摘要方法 byte[] digest = md.digest(data); return new HexBinaryAdapter().marshal(digest); } }

测试类:

package com.test;import com.code.SHACoder;public class SHACoderTest {public static void main(String[] args) throws Exception { String testString = "www.itency.com"; System.out.println(SHACoder.encodeSHA(testString.getBytes())); System.out.println(SHACoder.encodeSHA256(testString.getBytes())); System.out.println(SHACoder.encodeSHA384(testString.getBytes())); System.out.println(SHACoder.encodeSHA512(testString.getBytes())); }}

输出结果:

8C99CB574B380A7946197D234368E277EC9ACF7C932FFEA54BAF1BB4F0E1407DDE6C0076EA295446C30DF539D5FA389AB78DB61DEE119739A5149C2A619FB58C0062048626EA689189302BEFD599A2EED91BE8CB982F5F68656F2F1EBFBCC21A380C975C8BA21D1FBC2D92F43ADE4198CAF818A78CFD7E755092C60E253ED43C4F842D83125FE4899CF97B131A46758654E5BE0743865EFA9E0D03AE48C94AA78CB1E105

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值