SHA安全散列算法

前言

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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
散列算法是一种将任意长度的输入转换为固定长度输出的算法。它的基本原理是通过对输入数据进行一系列的处理和变换,最终生成一个唯一的散列值。这个散列值是根据输入数据计算得出的,并且具有以下几个特点: 1. 唯一性:对于不同的输入数据,散列算法应该生成不同的散列值。 2. 固定长度:无论输入数据的长度是多少,散列算法都会生成固定长度的输出。 3. 不可逆性:根据散列值无法推导出原始输入数据的内容。 4. 散列值的变化:即使输入数据的细微变化,也会导致生成的散列值完全不同。 实现散列算法的方法有很多种,其中常见的一种是MD5(Message Digest Algorithm 5)算法。MD5算法是MD家族中最常用的一种加密算法。它基于一系列的位操作、位移操作和逻辑运算,对输入数据进行分组处理,并通过多次迭代和轮函数的运算来生成最终的散列值。 MD5算法的实现过程可以分为以下几个步骤: 1. 填充信息:将输入数据进行填充,使得数据长度满足算法要求。 2. 初始值设置:设置初始的散列值,即A、B、C、D。 3. 真正的计算:通过多次迭代和轮函数的运算,对输入数据进行处理,最终生成散列值。 散列算法的实现还可以通过其他算法,如SHA-1、SHA-256等。在实际应用中,散列算法常用于校验文件的完整性和存储用户密码等场景。通过对文件进行散列计算,可以判断文件是否被篡改;而存储用户密码时,通常将密码进行散列处理,并将散列值存储在数据库中,以增加密码的安全性。 在Java中,可以使用java.security.MessageDigest类来实现并使用散列算法。使用该类可以对输入数据进行散列计算,并生成散列值。具体的实现和使用方法可以参考Java文档和相关教程。 综上所述,散列算法的基本原理是将任意长度的输入转换为固定长度的输出,通过一系列的处理和变换来生成唯一的散列值。常见的实现方法包括MD5算法SHA系列算法。使用Java的MessageDigest类可以方便地实现和使用散列算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值