一:基础知识:加盐哈希( hashing with salt)
我们已经知道,恶意攻击者使用查询表和彩虹表,破解普通哈希加密有多么快。我们也已经
了解到,使用随机加盐哈希可以解决这个问题。但是,我们使用什么样的盐值,又如何将其
混入密码中?
盐值应该使用加密的安全伪随机数生成器( Cryptographically Secure Pseudo-Random
Number Generator,CSPRNG )产生。CSPRNG和普通的伪随机数生成器有很大不同,
如“ C ”语言的rand()函数。顾名思义, CSPRNG 被设计成用于加密安全,这意味着它能提
供高度随机、完全不可预测的随机数。我们不希望盐值能够被预测到,所以必须使用 CSPRNG 。
下表列出了一些当前主流编程平台的 CSPRNG 方法。
| Platform | CSPRNG |
|---|---|
| PHP | mcrypt_create_iv, openssl_random_pseudo_bytes |
| Java | java.security.SecureRandom |
| Dot NET (C#, VB) | System.Security.Cryptography.RNGCryptoServiceProvider |
| Ruby | SecureRandom |
| Python | os.urandom |
| Perl | Math::Random::Secure |
| C/C++ (Windows API) | CryptGenRandom |
| Any language on GNU/Linux or Unix | Read from /dev/random or /dev/urandom |
每个用户的每一个密码都要使用独一无二的盐值。用户每次创建帐号或更改密码时,密码应采用一个新的随机盐值。
永远不要重复使用某个盐值。这个盐值也应该足够长,以使有足够多的盐值能用于哈希加密。一个经验规则是,盐
该版本面向个人用户及小型数字卡销售商开发,具有操作简捷、功能强大等特点,且安全及稳定性突出修正说明:1、纠正了部分页面的翻页错误;2、纠正了后台统计不能清零的错误;3、纠正了后台商品管理修改后出错以及无法彻底删除的错误;4、纠正了注册时不能检测用户名是否存在的错误;5、纠正了用户无法修改密码的错误;6、新增“更多新闻”;7、新增会员登陆验证码;8、去除多余及
0
值至少要跟哈希函数的输出一样长。该盐应和密码哈希一起存储在用户帐号表中。
存储密码的步骤:
使用 CSPRNG 生成足够长的随机盐值。
将盐值混入密码,并使用标准的密码哈希函数进行加密,如Argon2、 bcrypt 、 scrypt 或 PBKDF2 。
将盐值和对应的哈希值一起存入用户数据库。
校验密码的步骤:
从数据库检索出用户的盐值和对应的哈希值。
将盐值混入用户输入的密码,并且使用通用的哈希函数进行加密。
比较上一步的结果,是否和数据库存储的哈希值相同。如果它们相同,则表明密码是正确的;否则,该密码错误。
以上就是怎样去存储用户密码安全的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号