hash算法

哈希算法是信息安全中常用的技术,用于密码保存和文件校验。本文介绍了MD5、SHA1、SHA256和SHA512四种常见的哈希算法,包括它们的特点和使用场景。MD5已被证实存在弱点,而SHA家族则提供了更安全的选择,如SHA-256和SHA-512,它们的哈希值长度分别为256位和512位。
摘要由CSDN通过智能技术生成

什么是hash算法:

一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。

hash算法有几个特点:

1、只能通过原文计算出hash值,而且每次计算都一样,不能通过hash值计算原文。

2、原文的微小变化就能是hash值发生巨大变化。

3、一个好的hash算法还能尽量避免发生hash值重复的情况,也叫hash碰撞。

hash的用途:

1、密码的保存:

实际的工程当中我们一般不存储明文密码,而是将密码使用hash算法计算成hash值进行保存。这样即使密码丢失也不会使密码完全曝光。watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWl54m55pu855qE5LiA5Y-36JuL,size_20,color_FFFFFF,t_70,g_se,x_16

 

2、文件的校验,检查数据的一致性

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWl54m55pu855qE5LiA5Y-36JuL,size_20,color_FFFFFF,t_70,g_se,x_16

 

常见的Hash摘要算法

MD5

介绍:MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家【罗纳德·李维斯特】设计,于1992年公开,用以取代MD4算法。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。

public static void main(String[] args) throws Exception {

    MessageDigest md5 = MessageDigest.getInstance("MD5");

    byte[] digest = md5.digest("123".getBytes());

    System.out.println(Arrays.toString(digest));

}

[32, 44, -71, 98, -84, 89, 7, 91, -106, 75, 7, 21, 45, 35, 75, 112]

 

SHA1

SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

SHA 家族

正式名称为 SHA 的家族第一个成员发布于 1993年。然而人们给它取了一个非正式的名称 SHA-0 以避免与它的后继者混淆。两年之后, SHA-1,第一个 SHA 的后继者发布了。 另外还有四种变体,曾经发布以提升输出的范围和变更一些细微设计: SHA-224, SHA-256, SHA-384 和 SHA-512 (这些有时候也被称做 SHA-2):

public static void main(String[] args) Exception {

        MessageDigest sha1 = MessageDigest.getInstance("SHA1");

        byte[] digest = sha1.digest("123".getBytes());      System.out.println(Arrays.toString(digest));

}

[64, -67, 0, 21, 99, 8, 95, -61, 81, 101, 50, -98, -95, -1, 92, 94, -53, -37, -66, -17]

 

SHA256

SHA256算法使用的哈希值长度是256位。

public static void main(String[] args) throws Exception {

    MessageDigest sha256 = MessageDigest.getInstance("SHA-256");

    byte[] digest = sha256.digest("123".getBytes());   System.out.println(Arrays.toString(digest));

}

[-90, 101, -92, 89, 32, 66, 47, -99, 65, 126, 72, 103, -17, -36, 79, -72, -96, 74, 31, 63, -1, 31, -96, 126, -103, -114, -122, -9, -9, -94, 122, -29]

 

 

SHA512

算法使用的哈希值长度是512位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥特曼的一号蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值