使用Hash加密用户密码

laravel 中使用 Hash::make() 对用户密码进行加密 laravel 中使用 Hash::make() 对用户密码进行加密 问题描述: 在调试中发现使用 Hash:make($password) 对用户密码进行加密;在验证时发现对于相同的password 会出现不同的加密结果,那么加密之后进行对比肯定是不相等的。 看了下实现方式: 使用 Hash::check($password,$userInfo->password) 这种方式来对密码进行校验,不能使用 Hash:make($password) == $userInfo->password来 阅读详情

Hash加密是不可逆的,这样哪怕数据库被窃取,对方也无法获取到用户密码。
那么登录时如何校验用户密码是否正确呢?
其实很简单,就是再使用Hash加密一次,校验加密后的数据是否一致。
如果有用户密码设置一样,那么加密后的结果也是一样的,为了避免这种情况,使用Hash加密时可以采用随机数的方案,增加一个salt。
其中:
Hash(哈希值):密码经过不可逆计算后的结果。
Salt(盐值):随机生成的一段数据,用来参与密码哈希计算。
简单来说:
Hash = Hash算法(密码 + Salt);

一、数据表的结构

为了保证每次加密结果一样,首次加密使用的salt要保存下来。

字段名字段类型字段释义
idint用户id
accountstring账号
passwordHashstring密码Hash
passwordSaltstring密码salt

二、Hash加密

老规矩,直接上代码


    /// <summary>
    /// 密码工具类
    /// </summary>
    public static class PasswordHelper
    {
        /// <summary>
        /// 获取16位随机数
        /// </summary>
        /// <returns></returns>
        public static string GenerateSalt()
        {
            byte[] salt = new byte[16];
            RandomNumberGenerator.Fill(salt);
            return Convert.ToBase64String(salt);
        }

        /// <summary>
        /// 获取密码hash
        /// </summary>
        /// <param name="password"></param>
        /// <param name="salt"></param>
        /// <returns></returns>
        public static string HashPassword(string password, string salt)
        {
            byte[] saltBytes = Convert.FromBase64String(salt);

            using(var pbkdf2 = new Rfc2898DeriveBytes(
                password,
                saltBytes,
                100000,
                HashAlgorithmName.SHA256))
            {
                return Convert.ToBase64String(pbkdf2.GetBytes(32));
            }
        }

        /// <summary>
        /// 校验密码
        /// </summary>
        /// <param name="inputPassword"></param>
        /// <param name="storedHash"></param>
        /// <param name="storedSalt"></param>
        /// <returns></returns>
        public static bool VerifyPassword(string inputPassword, string storedHash, string storedSalt) 
        {
            byte[] inputHash = Convert.FromBase64String(HashPassword(inputPassword, storedSalt));

            byte[] dbHash = Convert.FromBase64String(storedHash);

            return CryptographicOperations.FixedTimeEquals(inputHash, dbHash);
        }

       
    }

三、创建用户

以下是伪代码。

void inserUser()
{
    string salt = PasswordHelper.GenerateSalt();
    string hash = PasswordHelper.HashPassword("testmima123", salt);

    // 创建用户
    User user = new User
    {
        account = "acount123",
        passwordHash = hash,
        passwordSalt = salt,
    };

    //插入
    InsertUser(user);
}

四、校验密码

以下是伪代码。

bool ok = PasswordHelper.VerifyPassword(
    "testmima123", // 用户登录时输入的密码
    user.PasswordHash, // 创建用户时保存的数据
    user.PasswordSalt// 创建用户时保存的数据
    );
    
if(ok){
	Console.WritLine("校验通过");
}else{
	Console.WritLine("输入密码错误");
}

如此,数据库就不会保存明文密码啦。
感谢看完全文,比心!

【Python】Hash+随机salt - 密码加密 Yixiaohan/show-me-the-code 第0021题 Notes    这个小项目中涉及加入随机salt的哈希算法。 阅读详情

相关推荐

java 密码验证 密文存储密码

照着JeeSite代码搬出来的。 需要了解的知识 Hex编码 散列算法 用户 注册/修改 密码的时候根据输入的密码生成一段加密串,每次验证密码时候根据算法进行密文比对,想要通过密文解出明文密码需要花费大量时间。 &lt;1&gt; 加密 1. 生成一段salt,值随机,长度自定义。 // 个人理解就是捣乱的,因为是随机的 2. 将 明文密码 + salt 进行散列N次。 //...

wolfies的博客 3327

php哈希算法加密解密,使用哈希算法在 Laravel 中实现密码加密

使用哈希算法在 Laravel 中实现密码加密由 学院君 创建于3年前, 最后更新于 11个月前版本号 #215790 views3 likes0 collects简介Laravel 的 Hash 门面为存储用户密码提供了安全的 Bcrypt 哈希算法。如果你正在使用 Laravel 应用自带的 LoginController 和 RegisterController 控制器,它们将会自动在注册和...

weixin_36424234的博客 814

【全新官方接口】php检测微信域名拦截,检测微信域名被封

你的域名在微信被拦截的3种常见情况 1、域名因违规或有风险被拦截(红色拦截) 2、类似taobao.com,douyin.com这种的恶意竞争式拦截,淘宝、抖音等微信的竞争对手一般都是白色拦截(白色拦截) 3、有一个中间页的拦截,需要多次点击按钮才可以跳转到你的域名的,多是一些新型域名后缀,例如.top .xyz .link后缀,这种情况,备案后可以解决(备案拦截) 通过php get_headers()函数就可以分析到结果 这个下标为6是一个URL,在微信访问后正是这个讨厌的页面! 如果切换为

TANKING,开源开发者! 2875

C# salt+hash 加密

1 先明确几个基本概念 (1)伪随机数:pseudo-random number generators ,简称为:PRNGs,是计算机利用一定的算法来产生的。伪随机数并不是假随机 数,这里的“伪”是有规律的意思,就 是计算机产生的伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定的规律,有 时不遵守任何规律;伪随机数有一部分遵守一定的规律...

weixin_43602710的博客 593

【MATLAB强化学习工具箱】学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent

Simulink中便于搭建各类动力学与控制模型,通过将原有的控制器替换为AI控制器,可以方便使用已有模型,提供增量效果。 本节的重点是如何引入Simulink模型作为env,其他的内容在之前的文章中已有说明。 以水箱模型watertank为例,如下图所示: 采用PI控制器,控制效果如下所示: 将此PI控制器替换为神经网络控制器后,系统架构如下图所示: 具体替换策略如下所示: (1)删去PID控制器; (2)增加RL Agent模块; (3)观测器模块: 观测向量为:,其中...

bear_miao的博客 1万+

Unity集成阿里Qwen2.5-Omni全模态大模型实战:语音交互与多模态AI开发指南

本文详细介绍了在Unity中集成阿里Qwen2.5-Omni全模态大模型的实战指南。通过C#脚本开发,实现语音交互、图像分析等多模态AI功能,涵盖API调用、音频处理、流式响应解析等核心步骤,为游戏、虚拟人等Unity应用提供沉浸式智能交互解决方案。

weixin_29005499的博客 315

用户登录安全:使用 Salt + Hash 来为密码加密

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。   加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,...

4035

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

如何安全保存用户密码及哈希算法

在很多网站的早期,甚至是现在仍然有一些网站,当你点击忘记密码功能时,你的邮箱会收到一封邮件,然后里面赫然写着你的密码,很多普通用户还会觉得庆幸,总算是找回来了,殊不知,这是多么可怕地一件事,说明了网站是“几乎是”明文存储你的密码,一旦数据用户数据泄露或者被拖库,那么用户密码将赤裸裸的暴露了,想想之前几次互联网密码泄露事件。那么如何解决呢?我们来看看解决了之前文章下面例子的什么问题。假如,明明和丽丽相互不认识,明明想给丽丽写一封情书,让隔壁老王送去如何保证隔壁老王不能看到情书内容?(保密性)

noob1561的博客 1439

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1363

YOLOv8改进 | 主干网络 | 将主干网络替换为轻量化的ShuffleNetv2【原理 + 完整代码】

yolov8,yolov8创新,yolov8改进

kay_545 2563

Laravel 5.5 加密

加密 encrypt(); // 加密 decrypt(); // 解密 // 哈希算法加密 Laravel 的 Hash 门面为存储用户密码提供了安全的 Bcrypt 哈希算法 Hash::make($request-&gt;newPassword); (通过哈希验证密码) Hash::check('plain-text', $hashedPasswo...

qq_37910492的博客 629

【ACP】2025-最新-疑难题解析- 练习二汇总

全球加速是优化公网访问的,负载均衡是分发流量的,公网 NAT 网关是处理公网 IP 的,高速通道是建私网连接但不直接提供固定私网地址功能。C 是客户端加密方式,D 是 ECS 云盘加密,都不属于 OSS 服务器端加密。某企业想使用云服务器 ECS + 负载均衡 SLB + 弹性伸缩 (Auto Scaling) 的架构搭建一个企业级门户网站,技术负责人对于负载均衡和弹性伸缩配合使用没有经验,于是将他理解的两种产品配合使用的一些技术细节列成了一个表单,并请作为架构师的您帮他做一下鉴别,以下哪些项是正确的?

jundao1997的专栏 293

【华夏OA项目实战】3-2 用户密码哈希加盐防御字典破解

Alibaba Spring Cloud + Dubbo3.0架构的微服务在线办公OA系统实战开发。

qq_40379416的博客 2102

决策变量乘积项的线性化

介绍了决策变量相乘情况下的线性化,并用案例进行线性化演示,其中针对连续变量相乘的情况介绍了McCormick包络的近似线性化方法

Linshaodan520的博客 1842

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

判断密文加密类型hash-identifier

判断密文加密类型hash-identifier   在安全领域中,加密数据随处可见。而在这些数据中,重要的数据往往采用哈希算法进行加密。例如,Linux密码使用sha512,Windows密码采用LM、NTLM,而网站密码采用MD5。这些常见哈希算法有几十种。虽然每种密文都有一定规律,但是单纯靠记忆和经验来的判断就比较困难了。   Kali Linux提供工具hash-identifier来实现这...

weixin_34326558的博客 364

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

常见哈希算法总结

哈希算法又称摘要算法,它的作用是对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的为了验证原始数据是否被篡改。哈希算法的特点就是1.相同的输入一定得到相同的输出;2.不同的输入大概率得到不同的输出。......

m0_59340907的博客 3187

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

常见的用户密码在后台数据库中加密存储方式

转载自:https://blog.youkuaiyun.com/ctrip_tech/article/details/80125741 一、用户密码加密 用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什么方式来保护用户的密码呢?以下几种方式是常见的密码保存方式: 1、直接明文保存,比如用户设置的密码是“123456”,直接将“123456”保存在数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。 2、使用对称加密算法来保存,比如3DES、AES等算法,使用这

g270382086的博客 3万+

使用go做后端,用户密码采取bcrpyt哈希加密

bcrypt哈希由多个部分组成。这些部分用于确定创建哈希的设置,从而可以在不需要任何其他信息的情况下对其进行验证。相较于MD5,SHA-256等哈希算法更适合用于做密码的哈希,原因在于bcrypt算法哈希字符串的速度远远慢于上面列举的那些算法。这样即使整个用户密码库被用户盗用后想要通过彩虹表和暴力破解的方法猜测出用户的密码代价会非常高昂。

weixin_43578304的博客 539

如何在NodeJs中使用Bcrypt来保护用户密码

不管你给你的程序进行了多少加密,黑客都可能有一万种办法黑进你的数据库。一个成熟的软件必须要有额外的加密系统。这样,即使数据库真的被攻破,我们也可以更好地保护我们的用户信息。这就是Bcrypt的作用,加盐salt和散列hash

a1611107035的博客 1948

用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)

(一).功能   用哈希算法: SHA1或MD5 实现用户账号和密码验证.   数据库存储实现原理是: 用户账号直接存储在数据库中,密码经过加密后再存储到数据库中.       当用户登录时,密码要经过加密后再与数据库中的实际存储密码比较,确定是否合法用户.(二).代码及实现    1.打开命名空间:    using System.Web.Security;  2.在用户注册界面,简要代码:

软件开发资料汇总 479

如何安全地存储密码

 无论是开发App还是网站,只要有用户登录环节,就会牵涉到如何存储用户的密码的问题。如果采用的存储密码的技术不够安全,一旦黑客闯入存储密码的数据库,他就能获取用户的密码从而可能给用户带来重大损失。这种情形任何公司都不希望发生在自己身上,因此选择安全地存储密码的策略显得十分必要。 不一定非要自己存储用户的密码 最简单的存储密码的方式就是自己并不存储,而是委托给信任的第三方存储。

何海涛的专栏 1万+

md5 php 加密后乱码_PHP中的密码加密的解决方案总结

很多用户多个网站使用一个密码,当一个密码丢失其他也遭殃,本篇文章介绍了PHP中的密码加密的解决方案总结,有需要的朋友可以了解一下。层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃一般的解决方案。1、将明文密码做单向hash$password = md5($_POST["password"]);2、密码+salt后做单向hash,PHP内置了...

weixin_33330157的博客 537
上一篇: Android 四大组件解析
下一篇: AES对称加密
HQL_seven
博客等级 码龄6年 64粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HQL_seven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值