参考文档

http://www.cnblogs.com/richardlee/articles/2511321.html

https://en.wikipedia.org/wiki/Salt_%28cryptography%29

https://www.91ri.org/7593.html

密码存储为什么不能是明文?

当账户密码是明文存储的话, 万一本网站给黑客攻破获取了数据, 则用户的账户被泄露。(术语叫 拖库)

当黑客知道了你的账户后, 其可以使用此账户,到其他网站尝试访问, 例如有厉害关系的网站, 银行等。 (术语叫 撞库)

一般来说, 普通用户为了减少密码记忆负担, 则容易在所有网站, 设置相同密码。

为了减少用户注册登陆流程,新的网站一般使用公共账户认证服务, 例如(qq 微信 等), 这样也可以减少拖库撞库危险。

密码应该以hash形式存储?

不能以明文形式存储, 自然以密文方式存储。

如果使用 对称加密方式, 则加密和解密的秘钥, 必须存储在网站上, 一旦密钥和算法泄露 并且 库被拖走, 密码就可以被直接计算出来,则密码的安全性仍然不能保证。

密码以hash方式存储, 则保证密码不能被反向计算出来, 就算网站的维护人员, 也不能查看到原始密码是多少。 最多其能看到一串 hash值。

黑客就算拿到hash值, 由于hash值不能被反向还原, 例如 MD5 SHA, 也只能悻悻然。

这样保证用户密码的安全性。

密码计算hash为什么要添加salt?

试想,如果对于每个密码, 都直接采用某种hash算法, 计算得到hash值。

对于一些简单密码, 其hash值是固定的, 则可以构造所有 最易使用的简单密码 的 hash值 成为一个表,

当黑客拖库拿到 密码的 hash值后,  其使用构造表中的 hash值比较, 如果你相等, 则得到 密码的原始值。

所以每年都有最弱密码排名, 提醒广大互联网用户, 不要使用简单密码。

http://tech.163.com/12/1029/04/8EV6LS9U000915BF.html

对于每一个密码都生成一个随机数(salt), 计算hash值的时候,将 salt 和 密码拼接后作为入参, 得到的hash值, 可以解决一张hash表, 尝试破解所有密码的问题。

但是对于单个密码, 其salt也被泄露, 如果即时构造一个 带salt的 hash表, 同样也可以破解密码。

如何加salt?

http://www.cnblogs.com/richardlee/articles/2511321.html

How long should the salt be?

The salt should be at least as long as the hash function. For example, if your hash function is 256 bits, then you should have a salt of at least 256 bits. I find that the easiest way to generate enough salt is to generate a random string of hex characters that is the same length as the hash function output (64 hex characters for 256 bits). First and foremost, your salt should be long enough so that no two users' passwords will ever be hashed using the same salt.

How do I generate the salt?

Use a Cryptographically Secure Pseudo-Random Number Generator (CSPRNG). Do NOT use your language's math library's rand() function. There will be a proper CSPRNG for you to use. In PHP, it's mcrypt_create_iv() and in .NET it's System.Security.Cryptography.RNGCryptoServiceProvider. The imporant thing is that the salt is uniquefor each user. Using a high quality CSPRNG to generate a long salt will practically guarantee uniqueness without needing to manually check if the salt has been used before.

如何选择hash算法?

What hash algorithm should I use?

DO use:

DO NOT use:

    • MD5
    • SHA0 or SHA1
    • crypt unless it uses SHA256 or SHA512
    • Any algorithm that you made yourself or hasn't gone through an intensive peer review process like the SHA3 competition

是否加了盐, 密码就安全了?

不是的, 添加了salt,是提高了破解的难度。  但是如果密码本身是不安全的, 例如非常简单的规则 纯数字 , 则很容易被破解。 不管是否添加salt。

所以一些网站要求, 密码 必须包含 字母 数字, 外还必须添加一种特殊符号。

Salted hash password的更多相关文章

  1. [Web Security] Create a hash salt password which can stored in DB

    We cannot directly store user password in the database. What need to do is creating a hashed & s ...

  2. 数据库里账号的密码,需要怎样安全的存放?—— 密码哈希(Password Hash)

    最早在大学的时候,只知道用 MD5 来存用户的账号的密码,但其实这非常不安全,而所用到的哈希函数,深入挖掘,也发现并不简单-- 一.普通的 Hash 函数 哈希(散列)函数是什么就不赘述了. 1.不推 ...

  3. Spring Security(三十三):10.3 Password Encoding

    Spring Security’s PasswordEncoder interface is used to support the use of passwords which are encode ...

  4. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  5. Hash 函数及其重要性

    不时会爆出网站的服务器和数据库被盗取,考虑到这点,就要确保用户一些敏感数据(例如密码)的安全性.今天,我们要学的是 hash 背后的基础知识,以及如何用它来保护你的 web 应用的密码. 申明 密码学 ...

  6. 理解php Hash函数,增强密码安全

    1.声明 密码学是一个复杂的话题,我也不是这方面的专家.许多高校和研究机构在这方面都有长期的研究.在这篇文章里,我希望尽量使用简单易懂的方式向你展示一种安全存储Web程序密码的方法. 2.“Hash” ...

  7. Helpers\Password

    Helpers\Password The password class uses php 5 password_ functions. To create a hash of a password, ...

  8. 使用nodeJS的 crypto模块来为你的密码hash加盐

    这篇文章将向你解释如何使用Node.js的Crypto模块对你的密码进行加盐hash.在这里,我们将不会对不懂的密码存储方式进行详细的比较.我们将要做的是知道在Node.js中使用加盐hash在进行密 ...

  9. 对抗明文口令泄露 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

随机推荐

  1. The design of a distributed variant of Plato framework to support collaborated editing

    A first thought system architecture (pulling mode) is one that the server doesn't keep client inform ...

  2. 没人告诉你关于z-index的一些事

    关于z-index的问题是很多程序员都不知道它是如何起作用的.说起来不难,但是大部分人并没有花时间去看规范,这往往会照成严重的后果. 你不信?那就一起来看看下面的问题. 问题 在下面的HTML我们写了 ...

  3. [Cocos2d-x For WP8]ActionManager动作管理

    在Cocos2d-x里面可以通过CCActionManger类来管理动作的暂停和恢复,CCActionMessage是管理所有Action的单例,一般情况下并不直接使用这个单例,而是使用CCNode的 ...

  4. spring Thymeleaf 中文乱码

    前言: 项目用springmvc+Thymeleaf ,但是发现html中的所有中文都乱码. 但是自己的html的编码确定已经是UTF-8,在web.xml文件里面也添加了CharacterEncod ...

  5. First day in 阿里

    周五上午10点半的飞机,为了便宜选了CA的空客320的飞机,结果体验很差.飞机涂了层风骚的粉紫色,机内较旧,也很小,经过所谓的头等舱简直惨不忍睹.对比起去年飞去北京乘的波音真是没法比,波音上每个人都有 ...

  6. Hibernate检索策略之延迟加载和立即加载

    延迟加载:延迟加载(lazy load懒加载)是当在真正需要数据时,才执行SQL语句进行查询.避免了无谓的性能开销. 延迟加载分类:  1.类级别的查询策略 2.一对多和多对多关联的查询策略 3.多对 ...

  7. mysql中一些简单但是新手容易犯的错误

    一.概述 本人近期使用mysql,由于是新手,常常碰到一些问题,因此,在这里做了一个错误备忘录. 二.错误罗列 1.MySQL 记录不存在时插入 记录存在则更新的实现方法 http://www.cnb ...

  8. Thinkphp框架感悟(二)

    这次主要分析一下I方法 /** * 获取输入参数 支持过滤和默认值 * 使用方法: * <code> * I('id',0); 获取id参数 自动判断get或者post * I('post ...

  9. *HDU 1286,2824欧拉函数

    #include<iostream> #include<string> #include<cstdio> #include<cmath> #includ ...

  10. 如何防御“神器”Mimikatz窃取系统密码?

    Mimikatz是一款能够从Windows中获取内存,并且获取明文密码和NTLM哈希值的神器,本文将介绍如何防御这款软件获取密码. Mimikatz介绍 Mimikatz是一款能够从Windows认证 ...