hash算法概念和hash加盐法

Hash算法,又称哈希算法,是一种创建文件数字指纹的方法,确保文件唯一性。其特点是正向快速、逆向困难、输入敏感和冲突避免。在数据结构中,如HashMap,Hash用于加速查找。在密码学中,Hash用于消息摘要和完整性校验,如MD5,具有压缩性、易计算、抗修改性和强抗碰撞特性。加盐法通过在密码中插入特定字符串防止散列结果被轻易猜测,提高安全性。
摘要由CSDN通过智能技术生成

前言

h = x % 10; 最简单的hash算法
h = (x+ salt) % 10; 加盐hash算法

思考:找回密码为什么一定要设置新密码,不能把原密码发送给用户?

Hash是什么,它的作用

散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

常见Hash算法有:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1等;

Hash算法有什么特点

一个优秀的 hash 算法,将能实现:

正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

Hash在数据结构中的应用

在用到hash进行管理的数据结构中,就对速度比较重视,对抗碰撞不太看中,只要保证hash均匀分布就可以。比如hashmap,hash值(key)存在的目的是加速键值对的查找,key的作用是为了将元素适当地放在各个桶里,对于抗碰撞的要求没有那么高。换句话说,hash出来的key,只要保证value大致均匀的放在不同的桶里就可以了。但整个算法的set性能,直接与hash值产生的速度有关࿰

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端通过哈希算法进行盐加密,后端需要使用相同的盐和哈希算法进行解密。下面是Java中的一个示例代码: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class SaltHash { public static void main(String[] args) throws NoSuchAlgorithmException { String password = "123456"; String salt = "abcdefg"; String encryptedPassword = encryptPassword(password, salt); System.out.println("Encrypted Password: " + encryptedPassword); String decryptedPassword = decryptPassword(encryptedPassword, salt); System.out.println("Decrypted Password: " + decryptedPassword); } public static String encryptPassword(String password, String salt) throws NoSuchAlgorithmException { String saltedPassword = salt + password; MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(saltedPassword.getBytes()); byte[] byteData = md.digest(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < byteData.length; i++) { sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); } return sb.toString(); } public static String decryptPassword(String encryptedPassword, String salt) throws NoSuchAlgorithmException { // In hash algorithms, decryption is not possible. We can only compare encrypted and decrypted passwords. String decryptedPassword = encryptPassword(encryptedPassword, salt); return decryptedPassword; } } ``` 在上面的示例中,我们使用了SHA-256哈希算法来加密密码。在加密过程中,我们将盐和密码拼接在一起,然后对其进行哈希。在解密过程中,我们不能直接解密加密后的密码,因为哈希算法不支持解密。我们只能对输入的密码进行哈希,然后与加密后的密码进行比较,以判断密码是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值