文档章节

关于加密的一些笔记

6pker
 6pker
发布于 2015/02/05 11:22
字数 679
阅读 144
收藏 10
生成一个随机数,我们称之为salt,
然后在数据库中记录salt和h=hash(pwd + salt),
查询的时候,得到用户的口令p,
后从数据库中查出salt,计算hash(p+salt),看是不是等于h,
等于就是对的,不等于就是不对的。


保护密码最好的的方式就是使用带盐的密码hash(salted password hashing).
只有加密hash函数(cryptographic hash functions)可以用来进行密码的hash。
这样的函数有SHA256, SHA512, RipeMD, WHIRLPOOL等。


根据一些经验得出来的规则就是盐的大小要跟hash函数的输出一致。比如,SHA256的输出是256bits(32bytes),盐的长度也应该是32个字节的随机数据。
一个使用加盐MD5的密码hash在实际使用中跟使用其他算法比如SHA256一样安全。不过如果可以的话,使用更安全的hash函数,比如SHA256, SHA512, RipeMD, WHIRLPOOL等是更好的选择。
盐要使用密码学上可靠安全的伪随机数生成器(Cryptographically Secure Pseudo-Random Number Generator (CSPRNG))来产生。
java.security.SecureRandom


每一个用户,每一个密码都要使用不同的盐。
用户每次创建账户或者修改密码都要使用一个新的随机盐。
永远不要重复使用盐。
盐的长度要足够,一个经验规则就是盐的至少要跟hash函数输出的长度一致。
盐应该跟hash一起存储在用户信息表里。


一个不错的学习web应用漏洞的资源是OWASP。除非你理解了OWASP Top Ten Vulnerability List,否则不要去写关系到敏感数据的程序。
经过充分测试的加密hash函数,比如SHA256, SHA512, RipeMD, WHIRLPOOL, SHA3等
不要使用 过时的hash函数,比如MD5,SHA1.任何自己设计的算法。


MD5 提供了最基本的安全 Hash 生成,使用时应为其添加 slat 来进一步加强它的安全性。
MD5 生成128位的 Hash。为了使它更安全,应该使用 SHA 算法生成 160-bit 或 512-bit 的长 Hash,其中 512-bit 是最强的。
虽然使用 SHA Hash 密码也能被当今快速的硬件破解,如要避免这一点,你需要的算法是能让暴力攻击尽可能的变慢且使影响减至最低。
这时候你可以使用 PBKDF2, BCrypt 或 SCrypt 算法。


PBKDF2(Password-Based Key Derivation Function)
美国政府机构已经将这个方法标准化,并且用于一些政府和军方的系统。 这个方案最大的优点是标准化,实现容易同时采用了久经考验的SHA算法。


DigestUtils.md5Hex(userName+DigestUtils.md5Hex(password))

© 著作权归作者所有

共有 人打赏支持
6pker
粉丝 51
博文 98
码字总数 59361
作品 0
浦东
程序员
Yoda:您的 Linux 系统命令行个人助理

不久前,我们介绍了一个名为 “Betty” 的命令行虚拟助手。今天,我偶然发现了一个类似的实用程序,叫做 “Yoda”。Yoda 是一个命令行个人助理,可以帮助您在 Linux 中完成一些琐碎的任务。它...

作者: Sk
04/29
0
0
我的印象笔记使用手册(2018版)

2017年,写过一篇类似文章。 谈及的内容以工具本身为主,通篇技巧,缺乏底层逻辑的思考。 这一年里,随着使用场景的扩大化,对这个不足有了一些新的理解。 基于此,形成此文。 内容比较干,但...

曹将PPT
10/12
0
0
了解加密学:从数学到物理(一)

了解加密学:从数学到物理(一) 2018-09-25 15:34编辑: 游星啊分类:区块链来源:蓝狐笔记 密码区块链 招聘信息: iOS开发 iOS开发 iOS开发 app开发上架H5技术 app开发技术 图像处理及模式...

游星啊
09/25
0
0
7 款印象笔记开源替代

印象笔记自 08年正式发布至今,已经拥有数以千万计的普通用户,百万计付费用户。不得不承认,印象笔记确实很强大,给众多用户带来诸多便利。 对于广大热爱开源的程序员来说,遗憾的是,它是闭...

催呀催呀
2016/08/05
11.1K
33
nginx 学习笔记(四)nginx + lua 使用 ssl 验证 浏览器证书

场景:接着笔记(三)的鉴权,需要先调用第三方服务进行鉴权,第三方对应的浏览器需要导入证书,否则就会报400错误,只有当鉴权成功后才能往下进行反向代理,此处就不强调如何生成证书,如何...

zhu_kai1
08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux安装MySQL的两种方法

1. 运行平台:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安装方法: 安装MySQL主要有两种方法:一种是通过源码自行编译安装,这种适合高级用户定制MySQL的特性,这里不做说明;另一种是通过...

onedotdot
26分钟前
4
0
phpize源码安装php扩展

4、进入源码中的ext/pcntl目录 ~# cd php-5.3.29/ext/pcntl/ 5、运行 phpize 命令 ~# phpizeConfiguring for:PHP Api Version: 20090626Zend Module Api No: 20090626......

bengozhong
34分钟前
2
0
Git 常用技巧

# Git 常用技巧 ## 暖场 - Git 怎么读 ? - Git 的作者是谁 ? - 谁没有 Github 账号 ? - 谁没有在 Github 提交过 issues,PR ? - 谁没有不会用命令操作 Git ? ## Git 简介 Git 是一种代码...

帝子兮
46分钟前
2
0
MySQL学习笔记

踩坑建议 对于时间相关字段,为插入及显示毫秒数据,建议使用datetime(6)类型,并设置数据库客户端显示毫秒相关数据

OSC_fly
46分钟前
0
0
spring配置文件中xsd引用异常

异常: org.xml.sax.SAXParseException; lineNumber: 78; columnNumber: 69; schema_reference.4: 无法读取方案文档 'http://www.springframework.org/schema/tx/spring-tx-3.2.xsd', 原因为......

zaolonglei
49分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部