首页 » SEO优化 » php哈希加盐技巧_一个简单的办法搞定密码的加盐哈希与验证

php哈希加盐技巧_一个简单的办法搞定密码的加盐哈希与验证

访客 2024-11-27 0

扫一扫用手机浏览

文章目录 [+]

单向哈希算法有一个特性,无法通过哈希后的择要(digest) 恢复原始数据,这也是 “单向” 二字的来源,这一点和所有的加密算法都不同。
常用的单向哈希算法包括 SHA-256, SHA-1, MD5 等。
例如,对密码“passwordhunter” 进行 SHA-256 哈希后的择要 (digest) 如下:

“bbed833d2c7805c4bf039b140bec7e7452125a04efa9e0b296395a9b95c2d44c”

php哈希加盐技巧_一个简单的办法搞定密码的加盐哈希与验证

可能是 “单向” 二字有误导性,也可能是上面那串数字唬人,不少人误以为这种办法很可靠, 实在不然。

php哈希加盐技巧_一个简单的办法搞定密码的加盐哈希与验证
(图片来自网络侵删)

单向哈希有两个特性:

1)从同一个密码进行单向哈希,得到的总是唯一确定的择要

2)打算速率快。
随着技能进步,尤其是显卡在高性能打算中的遍及,一秒钟能够完成数十亿次单向哈希打算

结合上面两个特点,考虑到多数人所利用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个择要组合, 然后与数据库中的择要进行比对即可得到对应的密码。
这个择要组合也被称为 rainbow table(彩虹表)。

更糟糕的是,一个攻击者只要建立上述的rainbow table,可以匹配所有的密码数据库。
仍旧等同于一家 “暴库”,全部遭殃。

加盐哈希

将明文密码混入 “随机成分 “,然后进行单向哈希后存储,也便是所谓的”Salted Hash(加盐哈希)”。

这个办法比较上面的方案,最大的好处是针对每一个数据库中的密码,都须要建立一个完全的 rainbow table 进行匹配。
由于两个同样利用 “passwordhunter”作为密码的账户,在数据库中存储的择要完备不同。

在 C# 中实现加盐哈希

早在2016年,MD5 作为哈希算法已经不可靠,可以人为制造碰撞,于是本文采取了 SHA256 作为哈希算法。
同时在哈希前天生了一个 Guid 作为盐和哈希值拼接在一起:

using System;using System.Security.Cryptography;using System.Text;public class PasswordHasher{ public string HashPassword(string password) { var rnd = Guid.NewGuid().ToString("N").Substring(10); return BuildHash(rnd, password); } public bool CheckPassword(string password, string hash) { if (string.IsNullOrWhiteSpace(hash)) { return false; } var items = hash.Split('|'); if (items.Length != 2) { return false; } var rnd = items[0]; return hash == BuildHash(rnd, password); } private string BuildHash(string rnd, string password) { var key = rnd + "|" + password.Trim(); var hash = Hash(key); return rnd + "|" + hash; } private string Hash(string input) { using (var sha = new SHA256CryptoServiceProvider()) { var bytes = Encoding.UTF8.GetBytes(input); bytes = sha.ComputeHash(bytes); return Convert.ToBase64String(bytes); } }}

天生加盐哈希值:

//天生加盐哈希var hasher = new PasswordHasher();var pwd = hasher.HashPassword("123456");Console.WriteLine("加盐哈希值为:{0}",pwd);

校验密码是否匹配:

//校验密码是否匹配var hasher = new PasswordHasher();var hash = "89455bb276f037799fea1d|1rcfw+tSKhpG7zuW7Sm6SuMgjafAwsMg76OlyFkXLm8=";var pwd = "123456";if (hasher.CheckPassword(pwd, hash)){ Console.WriteLine("密码精确");}else{ Console.WriteLine("密码不匹配");}

标签:

相关文章

介绍百度网盘,云端存储时代的创新先锋

随着互联网技术的飞速发展,云计算已经成为现代生活不可或缺的一部分。而在这其中,百度网盘作为国内领先的云存储服务提供商,以其卓越的性...

SEO优化 2025-01-03 阅读1 评论0

介绍监控屏蔽技术,守护个人隐私的利器

随着科技的发展,监控设备已经深入到我们生活的方方面面。在享受便利的隐私安全问题也日益凸显。如何有效屏蔽监控,保护个人隐私,成为人们...

SEO优化 2025-01-03 阅读1 评论0

介绍番号观看方法,轻松驾驭影视世界

随着互联网的普及,网络影视资源日益丰富,番号作为影视作品的标识码,已经成为广大观众了解、搜索和观看影视作品的重要途径。如何正确地使...

SEO优化 2025-01-03 阅读1 评论0

介绍盗微信号黑幕,网络安全的严峻挑战

在数字化时代,微信已成为人们生活中不可或缺的通讯工具。随着微信用户数量的激增,盗微信号的事件也日益增多。本文将深入剖析盗微信号的方...

SEO优化 2025-01-03 阅读1 评论0