前言

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值产生的速度有关,所以这时候的hash值的产生速度就尤为重要:

// String hashCode
public int hashCode() {int h = hash;//hash default value : 0 if (h == 0 && value.length > 0) {//value : char storagechar val[] = value;for (int i = 0; i < value.length; i++) {h = 31 * h + val[i];}hash = h;}return h;
}// hashMap hash
static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

具体实践应用:hashMap、hashCode、负载均衡、数据库分库分表、分布式存储(oss用户附件存储)、数据定位(月小结语录、匿名圈头像)

Hash在在密码学中的应用

在密码学中,hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。最常见的就是用户密码采用MD5存储。
一个设计良好的hash算法,其抗碰撞能力是很高的。以MD5为例,主要特点包含:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5应用场景:一致性验证、数字签名、安全访问认证等
具体实践应用:唯一值计算(oss文件名)、数据安全校验、安全加密(用户密码)

salt(盐)

“salt(盐)” 在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
加盐的复杂程度取决于你业务安全的重要程度。
密码学中加盐举例:oss用户文件存储

fileName = md5(bizId) → md5(bizId+salt)
用户A: md5(userId + a3$)
用户B: md5(userId + a3$)

如果单纯的用md5(userId),别人很容易就猜到你的文件名,改变路径的文件名就能取到其他文件。
如果加了盐,那么在源码泄露之前就没法猜测你获取文件的方法。

所以现在能回答开始的问题了:因为我们根本不知道原密码!

hash算法概念和hash加盐法相关推荐

  1. hash算法_一致性hash算法简介

    一致性hash算法有什么用?我们为什么需要一致性hash算法?这两个问题的答案可以看这篇文章 分布式系统路由算法简介. 了解了一致性hash算法出现的背景,我们来看看什么是一致性hash算法.一致性h ...

  2. 国密算法:利用python进行sm3 hash算法,计算hash值,国密算法库gmssl的使用

    本篇介绍利用gmssl算法库中的sm3模块来进行hash值的计算. 一 sm3 hash算法的特点: sm3用于计算一个消息的hash值: 几乎无法被逆向,即通过hash值无法推断出原始消息: sm3 ...

  3. 算法概念:大O表示法/小o表示法/Ω/Θ

    如果算法A需要的时间与f(n)成正比,则算法A称为f(n)阶,表示为O(f(n)).函数f(n)称为算法的增率函数(growth-rate function).该表示法使用大写字母O来表示(order ...

  4. [转]加盐hash保存密码的正确方式

    本文转自:http://drops.wooyun.org/papers/1066 0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一 ...

  5. Hash的简介与hashlib模块的使用、模拟撞库与密码加盐

    什么是Hash呢? hash(哈希)是一类算法(如md5),hash算法又称为散列表(hash table),也叫做哈希表,该算法接受传入的内容,经过运算得到一串hash值(字符串) hash值的特点 ...

  6. 加盐hash保存密码的正确方式

    0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码, ...

  7. 加盐hash保存密码的正确方式(上)

    为什么要在密码里加点"盐" 盐(Salt) 在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为"加盐&q ...

  8. hash算法_到底什么是Hash?Hash算法的原理和实际应用讲解

    提到hash,相信大多数同学都不会陌生,之前很火现在也依旧很火的技术区块链背后的底层原理之一就是hash,下面就从hash算法的原理和实际应用等几个角度,对hash算法进行一个讲解. 1.什么是Has ...

  9. 详解【负载均衡】(负载均衡算法、一致性hash、负载均衡架构分析)

    作者:duktig 博客:https://duktig.cn 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 本文源码参看:https://github.com/duktig666/distribute ...

  10. Hash算法的原理及应用

    1.什么是Hash Hash也称散列.哈希,对应的英文都是Hash.基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出.这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就 ...

最新文章

  1. Loadrunner手动关联详解
  2. 无性别服饰是趋势,但不该只停留在“中性”
  3. OI模板のpoke流[大型考试复习必备/kl]
  4. 【机器学习算法专题(蓄力计划)】七、机器学习中数据的相关分析
  5. try catch finally语句详解
  6. 移动开发架构之MVVM模式
  7. mysql 预留一个自定义字段_mysql-预留字段
  8. 【博主推荐】Python 基于Xlwings、Openpyxl自己重新封装Python操作Excel类
  9. android包结构规范,【Android】Android产品-开发规范
  10. vSphere 5.5:使用 RVC VSAN 监控工具第 2 部分
  11. 关于新功能研发的一些脑洞
  12. SheetJS 读取excel文件转出json
  13. javascript动态插入html元素
  14. 内网通过计算机名查询IP地址
  15. 银行卡所属银行的查询接口--阿里提供
  16. python小乌龟绘制迷宫_python小乌龟turtle数学作图
  17. PPT“备注”内容字体可以修改颜色也能直接看到修改效果
  18. mapDispatchToProps的三种方式mapStateToProps
  19. 杭州城市数据大脑发布:首战交通拥堵
  20. Python- exe应用程序在Windows Server2012 64位系统运行报错

热门文章

  1. 作死!研究生用实验室里的烧杯冲咖啡,喝完就进了医院抢救
  2. cad的php文件怎么用,CAD无法弹出打开、保存等窗口,用FILEDIA解决
  3. 腾讯云联手腾讯安全玄武实验室,提供「应用克隆」漏洞免费检测服务
  4. STM32定时器周期任务函数编写
  5. 手机模拟器安装证书抓包
  6. android访问服务器405,android
  7. 【协议】LLDP、ARP、STP、ICMP协议
  8. onvif开发踩坑【二】鉴权失败
  9. 最新最全的阿里云产品手册出炉
  10. xlsx表格怎么筛选重复数据_excel表格怎么筛选重复数据