SHA安全散列算法

本文深入解析SHA算法家族,包括SHA1、SHA256、SHA384和SHA512,探讨其在信息安全领域的应用及安全性。文章还介绍了如何在Java中使用commons-codec库实现SHA算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

体能状态先于精神状态,习惯先于决心,聚焦先于喜好。

SHA 安全散列算法

安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族.
和MD5类似,安全散列算法可以根据字符串生成一定长度的摘要信息,该摘要信息不可逆转,且不同的字符串的摘要信息相同的概率极低。

SHA家族

SHA 有多个算法,有一些已经过时不再推荐使用,有一些是安全度很高的,但是会降低性能。

SHA1

对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。
不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。
可以用于校验信息是否被篡改,比如数字证书的签名
已经不安全了,所以数字签名证书多用SHA256

SHA256

SHA256 从功能上来说和 SHA1类似,一般也用于信息摘要,算法使用的哈希值长度是256位
用于数字证书的签名,一般数据的签名,目前流行的安全散列算法

SHA384、SHA512

内容略,更安全,也更消耗性能,截止2019年8月20日,这两种算法都还没有大范围推荐使用,市面上推荐的是 SHA256

安全性

目前而言,SHA1 不安全了,SHA256还是安全的
但是从兼容性来说,很多系统依旧支持SHA1,但是最新的则会要求是SHA256

Java 中的 SHA

使用 commons-codec

可以使用 Apache 提供的 jar 包 commons-codec
Maven 依赖如下

<dependency>
	<groupId>commons-codec</groupId>
	<artifactId>commons-codec</artifactId>
	<version>1.10</version>
</dependency>
代码举例

结果是字节数组,转化为 16进制展示

Java
import org.apache.commons.codec.digest.DigestUtils;

public class ShaTest {

    public static void main(String [] args){
        String str="123";
        String sha1HexStr=DigestUtils.sha1Hex(str.getBytes());
        System.out.println("SHA1"+":"+sha1HexStr.length()+";"+sha1HexStr);

        String sha256HexStr=DigestUtils.sha256Hex(str.getBytes());
        System.out.println("SHA256"+":"+sha256HexStr.length()+";"+sha256HexStr);

        String sha384HexStr=DigestUtils.sha384Hex(str.getBytes());
        System.out.println("SHA384"+":"+sha384HexStr.length()+";"+sha384HexStr);

        String sha512HexStr=DigestUtils.sha512Hex(str.getBytes());
        System.out.println("SHA512"+":"+sha512HexStr.length()+";"+sha512HexStr);
    }
}
结果-使用16进制展示
SHA1:40;40bd001563085fc35165329ea1ff5c5ecbdbbeef
SHA256:64;a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
SHA384:96;9a0a82f0c0cf31470d7affede3406cc9aa8410671520b727044eda15b4c25532a9b5cd8aaf9cec4919d76255b6bfb00f
SHA512:128;3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值