如何测试两个哈希值(密码)是否相似?

2024-04-26

当用户创建密码时,我对其进行哈希处理(包括盐)并将其保存在数据库中。

现在,当用户想要更改他或她的密码时,我想测试新密码是否与旧密码太相似(我已经在不同的服务上看到过这种情况,尤其是网上银行)。

所以,我想我会使用similar_text or levenshtein功能。如果用户必须输入他或她的旧密码,则此方法有效。

但是,当用户忘记密码并且需要重置密码时,显然不必输入旧密码。因此,我需要将新密码与旧密码(保存在数据库中)进行比较,我没有纯文本形式的密码,而是哈希值。

现在,当我使用相同的盐对新密码进行哈希处理,并将其与旧密码(经过哈希处理)进行比较时,我显然无法测试新密码和旧密码是否相似。

我只是想知道,当公司不将密码以纯文本形式保存在数据库中时,他们是如何做到这一点的?

我在谷歌上找不到任何有用的东西。如果有人有任何建议,或者更详细讨论此问题的文章链接,如果他们能够分享,我将不胜感激。


如果存储的密码经过散列(而不是加密),则测试相似性的一种方法是生成新密码的许多可能的排列,对排列进行散列,并查看这些散列中的任何一个是否与存储的散列相对应。

生成排列的规则与不允许的相似性的规则相同。

OLD

password1

NEW

password2

排列

password
password1   // This permutation's hash matches the stored hash.
password3
1password
etc...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试两个哈希值(密码)是否相似? 的相关文章

随机推荐

  • WCF OperationContract 方法的 WebGet 属性可以有多个 ResponseFormat 类型吗?

    我有一个 ServiceContract 描述 WCF 服务中使用的方法 该方法具有定义 UriTemplate 和 ResponseFormat 的 WebGet 属性 我想重用单个方法并拥有多个具有不同 UriTemplate 和不同
  • 将正则表达式拆分为 2 个捕获组

    好吧 我之前的问题都得到解答了 我还有一个 这个对我来说比较难 A Za z A Za z0 9 domain com 现在这个表达式只产生 1 个捕获组 如 所示 我该如何为此 URL 执行 2 个捕获组 用于IIS正则表达式重写 您可以
  • 通过wget命令爬取sitemap.xml的链接

    我尝试抓取 sitemap xml 的所有链接以重新缓存网站 但是 wget 的递归选项不起作用 我只得到响应 远程文件存在 但不包含任何链接 无法检索 但可以肯定的是 sitemap xml 充满了 http 链接 我尝试了 wget 的
  • MySQL 一对多转 JSON 格式

    我有两个 MySQL 表 User id name Sale id user item Where Sale user 是一个外键User id 所以这是一种一对多的关系 一个用户可以进行多次销售 我试图从数据库中获取它并以 JSON 格式
  • jquery .ajax() 问题

    我正在使用 Jquery 1 7 1 但遇到了问题 我正在脚本中使用 CRM 并正在努力完成页面 但我遇到了这个问题 my html
  • 在 iOS 中禁用文本选择标注

    我知道当用户长按某个按钮时您可以禁用标注link使用这个 body webkit touch callout none important a webkit user select none important 但是文本选择菜单呢 我的用例
  • 重写具有不同返回类型的成员函数

    考虑下面的例子 include
  • 在 Julia 中提取参数类型

    假设我在 Julia 中编写了一个函数 它接受Dict K V 作为参数 然后创建类型的数组Array K 1 and Array V 1 我怎样才能提取类型K and V来自 Dict 对象 以便我可以使用它们来创建数组 斯文和约翰的答案
  • 仅适用于数字和连字符的正则表达式

    我试图理解正则表达式 对于长度为 10 的数字我可以简单地做 0 9 10 对于连字符只有我能做 使用组表达式将两者结合起来将导致 0 9 10 该表达式无法按预期工作 如果字符串无效 它会以某种方式匹配字符串的一部分 而不是根本不匹配 如
  • Hibernate无法打开连接

    我在休眠时遇到问题 无法打开连接 我有一个 DAO public class MyDao extends HibernateDaoSupport DataSource dataSource public void setDataSource
  • 安卓浏览器有bug? div溢出滚动

    你能让div的溢出内容在Android浏览器中滚动吗 它在所有其他现代浏览器中都是可滚动的 在 iOS 中 它是可滚动的 但它不显示滚动条 但可以通过拖动来滚动 一个简单的例子 http jsfiddle net KPuW5 1 embed
  • .hide("slow") 是同步方法还是异步方法?

    据我们所知 ajax 是一个异步方法 因为下一个语句之前开始执行ajax 方法已完全执行 ajax 继续并行执行其工作 并且hide 是一个同步方法 因为它立即隐藏元素 并且下一条语句将在何时执行hide 确实完成了他的全部任务 但我真的很
  • 此 xpath 查询的 Flex/AS3/E4X 等效项是什么?

    鉴于此文档
  • 一个应用程序的最大线程数?

    我想知道一个应用程序的最大线程数 您知道 Thread activeCount 返回正在运行的线程组及其子组中的活动线程数 如果我知道当前活动中要创建的最大线程数 我就可以限制活动线程 我正在使用线程进行 http 连接并捕获 Http 响
  • 类通过回调提供数据

    在用 C 编程一段时间后 我最近回到了 Visual C 因为 C 中的回调要容易得多 我有一个控制 0 连接设备的单例类 我的想法是在此类中创建一个函数 它将迭代一组 连接的设备并通过回调将其发布到任何可能需要它的地方 e g Singl
  • C++ 或 Java 中保存 20 位整数的数据类型

    Java 或 C 中是否有可以保存 20 位或更多数字的整数值的数据类型 long long 数据类型最多只能容纳 18 位数字 Java具体 您正在寻找BigInteger http docs oracle com javase 7 do
  • 如何在H2中定义Oracle Package procedure进行测试

    我正在测试一个 Spring Boot 应用程序 该应用程序将数据读取 写入 Oracle DB 该 Oracle DB 具有 Oracle 包以及这些包中的过程 在某些时候 Spring Boot应用程序通过实体存储库调用此过程 如下所示
  • 模拟 with 语句中使用的类

    我有一堂课有一个 exit and enter 函数 以便我可以在 with 语句中使用它 例如 with ClassName as c c do something 我现在正在尝试编写一个单元测试来测试这一点 基本上 我想测试一下do s
  • 运行时静默更新应用程序

    我的应用程序最初将使用 Windows Installer 进行部署 我正在寻找的解决方案的主要特征包括 支持应用程序静默更新 运行 或自动重启 客户 易于维护和管理包装 过程 避免复杂的定制或 安装脚本 您对我如何实现这一目标有什么想法吗
  • 如何测试两个哈希值(密码)是否相似?

    当用户创建密码时 我对其进行哈希处理 包括盐 并将其保存在数据库中 现在 当用户想要更改他或她的密码时 我想测试新密码是否与旧密码太相似 我已经在不同的服务上看到过这种情况 尤其是网上银行 所以 我想我会使用similar text or