Java SHA-256加密的两种实现方法详解

利用Apache的工具类实现加密,使用commons-codec包中的DigestUtils算法工具类(入参支持字符串、字节数组、文件流等)

maven:

1

2

3

4

5

<dependency>

 <groupId>commons-codec</groupId>

 <artifactId>commons-codec</artifactId>

 <version>${common-codec.version}</version>

</dependency>

实现代码:

import java.security.MessageDigest;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
import org.apache.commons.codec.digest.DigestUtils;
 
public abstract class SHACoder {
 
    /**
     * SHA加密
     * 
     * @param data 待加密数据
     * @return byte[] 消息摘要
     * @throws Exception
     */
    public static byte[] encodeSHA(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.sha(data);
    }
 
    /**
     * SHAHex加密
     * 
     * @param data 待加密数据
     * @return String 消息摘要
     * @throws Exception
     */
    public static String encodeSHAHex(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.shaHex(data);
    }
 
    /**
     * SHA-224加密
     * 
     * @param data
     *            待加密数据
     * @return byte[] 消息摘要
     * 
     * @throws Exception
     */
    public static byte[] encodeSHA224(byte[] data) throws Exception {
        // 加入BouncyCastleProvider支持
        Security.addProvider(new BouncyCastleProvider());
 
        // 初始化MessageDigest
        MessageDigest md = MessageDigest.getInstance("SHA-224");
 
        // 执行消息摘要
        return md.digest(data);
    }
 
    /**
     * SHA-224加密
     * 
     * @param data
     *            待加密数据
     * @return byte[] 消息摘要
     * @throws Exception
     */
    public static String encodeSHA224Hex(byte[] data) throws Exception {
 
        // 执行消息摘要
        byte[] b = encodeSHA224(data);
 
        // 做十六进制编码处理
        return new String(Hex.encode(b));
 
    }
 
    /**
     * SHA256加密
     * 
     * @param data 待加密数据
     * @return byte[] 消息摘要
     * @throws Exception
     */
    public static byte[] encodeSHA256(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.sha256(data);
    }
 
    /**
     * SHA256Hex加密
     * 
     * @param data 待加密数据
     * @return String 消息摘要
     * @throws Exception
     */
    public static String encodeSHA256Hex(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.sha256Hex(data);
    }
 
    /**
     * SHA384加密
     * 
     * @param data 待加密数据
     * @return byte[] 消息摘要 
     * @throws Exception
     */
    public static byte[] encodeSHA384(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.sha384(data);
    }
 
    /**
     * SHA384Hex加密
     * 
     * @param data 待加密数据
     * @return String 消息摘要 
     * @throws Exception
     */
    public static String encodeSHA384Hex(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.sha384Hex(data);
    }
 
    /**
     * SHA512Hex加密
     * 
     * @param data 待加密数据
     * @return byte[] 消息摘要
     * @throws Exception
     */
    public static byte[] encodeSHA512(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.sha512(data);
    }
 
    /**
     * SHA512Hex加密
     * 
     * @param data 待加密数据
     * @return String 消息摘要
     * @throws Exception
     */
    public static String encodeSHA512Hex(String data) throws Exception {
 
        // 执行消息摘要
        return DigestUtils.sha512Hex(data);
    }
 
}

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

在线SHA1加密工具:
http://tools.jb51.net/password/sha1encode

文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java数组操作技巧总结

希望本文所述对大家java程序设计有所帮助。

您可能感兴趣的文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值