为什么 PHP crypt() 函数为两个不同的字符串返回相同的内容?

2023-12-05

我正在使用 PHPcrypt函数用于密码散列/加密,但我认为我做得不对,因为“nathan12”和“nathan123”都允许我登录系统上的帐户(实际密码是“nathan123”,因此“nathan12” “或者其他什么应该NOT允许我登录)。

这是我的系统在用户注册时执行的操作:

[...]

$salt = uniqid(mt_rand(), true);
$password = crypt($password, $salt); // '$password' is the inputted password

$insertUserStmt = $mysqli->prepare("INSERT INTO users (name, 
username, 
password, 
password_salt, 
email, 
created) VALUES (?, ?, ?, ?, ?, ?)");

$insertUserStmt->bind_param("sssssi", $name, $username, $password, $salt, $email, time());

$insertUserStmt->execute();

[...]

它插入散列/加密的密码($password)与数据库一起$salt.

当有人尝试登录时,将执行以下操作来检查用户是否输入了他们输入的用户名的正确密码:

[...]

// $password_salt is from DB; $password is inputted password
$password_crypt = crypt($password, $password_salt); 

// $login_password is from DB
if($password_crypt == $login_password) { 

[...]

我可能甚至没有使用crypt功能正常,但根据 PHP 文档,第一个参数是字符串(密码),第二个参数是盐。


基于标准 DEScrypt()[...]仅使用前八个字符str,因此以相同的八个字符开头的较长字符串将生成相同的结果(当使用相同的盐时)。

source

使用以以下开头的盐$<algo>$使用 DES 以外的东西。请参阅crypt()文档了解详细信息。

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

为什么 PHP crypt() 函数为两个不同的字符串返回相同的内容? 的相关文章

  • 如何将UTF-8编码的汉字从MySql正确导出到SQL

    过去三天我们正在与严重的问题作斗争 我们从PhpmyAdmin导出MySql数据库文件 数据库条目中写入的数据是带有UTF 8字符集的中文 导出后将其转换为拉丁字符集 现在我们正在将此数据库SQl文件导入到其他主机 我们在UTF 8和排序规
  • mysql 将 varchar 字段排序为整数

    我的表中有一个 varchar 字段 我想对其进行排序 但我需要将此字段作为整数处理 意思是如果按文本排序 顺序是 19 2 20 但我想得到正确的顺序 2 19 20 谁能帮我 我不知何故没有设法运行查询CAST 我总是得到Error C
  • 如何在javascript中显示目录中的所有图像?

    我想在 javascript 的帮助下动态显示目录中的所有图像 我怎样才能做到这一点 我不认为这是可能的 但如果您向 ASP NET 或 PHP 或类似 页面发出 AJAX 请求 它们可以列出文件夹中的文件并将其返回以供 Javascrip
  • MySQL - 查找与连接表中的所有行匹配的行

    表 1 曲目 表 2 词汇表 表 3 N M 轨道有单词 trackwords 找到包含所有单词的所有曲目 目前查询如下 SELECT DISTINCT t id FROM track as t Left Join trackwords a
  • mysql - 选择日期时间和组中的小时

    我有一个 ShoppingDates 的日期时间列 假设我有 1000 行 2012 年 7 月 18 日 5 33 39 下午 2012 年 7 月 16 日 6 64 39 下午 2012 年 7 月 14 日 7 34 39 下午 2
  • PHP 的 Dom Node 查找 href 属性问题

    我正在尝试使用 php domDocument 从某些数据的 url 中提取 href 以下拉动网址的锚点 但我想要网址 events i race 1 trim cols gt item 1 gt nodeValue 如果有帮助的话 这里
  • 在 Woocommerce 的单个产品页面中添加产品注释字段

    我要创建定制订单备注 in 单品用户的详细信息页面 这个可以使用 php 来完成 无需插件 我已附上屏幕截图和网站 URL 以供参考 已尝试使用此代码function php它在结账页面上工作 而不是在产品信息页 任何人都可以帮助我实现这一
  • JWT 中的注销不起作用

    我是 Laravel 的新手 我安装了 JWT 并登录 所以它工作并生成了一个令牌 当我在邮递员中注销时它返回 true 但一次又一次它返回 true 和 auth gt 用户 注销后始终返回用户 这是我的代码 public functio
  • php 发送带有图像的电子邮件

    我正在尝试发送一封带有图片的电子邮件 我的电子邮件正文是 当我收到电子邮件时 我看不到图片 相反 我 看 img src http planet earth bogus us icons secret pictures gif 我知道这是因
  • 在浏览器中就绪的 DOM 上缺少语言翻译弹出窗口:Laravel 5.2

    我的控制器中有以下代码 public function AllCountries Countries new App DataAccess CountryData gt GetAllCountries app gt setLocale fr
  • rewrite_mod 已启用,但 .htaccess 不起作用

    我在 Amazon EC2 的 ubuntu 12 04 中使用 apache 2 2 我使用启用了 mod rewrite sudo a2enmod rewrite 并能够看到 apache2ctl M 现在我编写了以下 htaccess
  • 无法在Phalcon php中调用除indexAction之外的indexController的操作

    我的 xampp htdocs 目录中有一个名为 phalcon 的简单项目 并且我将 apache 配置为指向该文件夹 以便我可以在浏览器中转到 phalcon 当我尝试打开索引 默认 以外的索引控制器视图时 会出现问题 例如 我在索引控
  • 是否可以使用 LOAD DATA INFILE 类型命令来更新数据库中的行?

    伪表 primary key first name last name date of birth 1 John Smith 07 04 1982 眼下名包含多行的用户全名 期望的结果是分割数据 因此first name包含 John la
  • PHP:在执行 php 脚本时显示“正在加载”页面

    这就是我现在所拥有的 我有一个网页 当访问该网页时 它会通过开放 API 连接到 Surveygizmo com 检索大量数据 然后将这些数据返回给我进行处理 此过程大约需要 10 12 秒 在执行时 页面只是处于 正在加载 状态 并且我会
  • Doctrine QueryBuilder 重用部件

    我想计算所有符合我的条件的字段 并使用学说查询生成器逐页获取它们 我生成的查询取决于我的过滤器字段 第一部分是计算记录 以便我可以计算页数 qb em gt createQueryBuilder qb gt select COUNT m i
  • 如何编辑 Woocommerce 单一产品元模板中显示的内容?

    我正在为客户做一些工作并使用 wordpress woocommerce 他们要求我将类别移动到我已经完成的单个产品页面上的产品名称下 但他们不希望它打印 类别 类别 1 类别 2 等 他们希望删除 类别 并且它实际上只列出类别的名称 而不
  • 带缓存的简约 PHP 模板引擎,但不带 Smarty?

    有大量的问题 https stackoverflow com search q php template engine cache寻找 正确的 PHP 模板引擎 但它们都不专注于缓存 有谁知道一个轻量级 高质量 基于 PHP 5 的模板引擎
  • 学说 - 获取下一个和上一个记录

    这样我就已经获取了一些记录 我已创建日期字段 现在我想按日期获取下一条和上一条记录 通过以下方式让它工作 qb this gt createQueryBuilder a next qb gt expr gt gt a created dat
  • jQuery 不断 ping 以获得 Ajax 响应

    如何使用 jQuery 不断运行 PHP 脚本并每秒获取响应 并将鼠标上的少量数据发送到同一脚本 我真的需要添加一些随机扩展才能让这样一个简单的计时器工作吗 迭代是人类的 递归是神圣的 L 彼得 多伊奇 http www devtopics
  • 如何使用多个分隔符拆分列表?

    基本上 我想在文本区域中输入文本 然后使用它们 例如 variable1 variable2 variable3 variable1 variable2 variable3 variable1 variable2 variable3 我知道

随机推荐