PHP crypt() 返回错误答案

2024-02-01

我想我在这里失去了理智......我的网站遇到了一个问题,它随机停止接受登录。我现在已经能够追踪到 crypt() 的行为非常奇怪。

在我的数据库中,我有用户密码的加密版本 - 所以假设是 Og12345678。

当用户登录时,他们输入密码,我从数据库中读取盐,然后加密他们输入的内容并进行比较 - 通常这效果很好。

所以我正在做 crypt($enteredPassword, $saltFromDb) - 在这种情况下,盐当然是 Og。通常对于给定的用户密码加密工作正常。

当出现问题时(当出现问题时,这是一个永久性的更改,直到我重新启动 Apache)我发现 crypt 开始为具有相同盐的相同输入返回不同的答案。

然而,它是一致的,即一旦系统出错,密码就会返回错误的答案,但它总是返回same错误的答案。重复刷新页面会显示相同的输出。同样的盐也出现在新的错误的地穴结果中,所以并不是说盐在某个地方丢失了。

如果我随后重新启动 Apache 并重新运行脚本而不做任何更改,那么 crypt 的结果就会恢复到应有的样子。

我很欣赏它不是最新的 PHP (5.2.8),但会重视对此的任何看法,包括是否是在更高版本中修复的已知错误(升级 PHP 并不是一件愉快的任务,因为许多网站仍然使用不幸的怪癖,每次升级都需要重新测试) - 如果这是一个已知的已修复错误,那么显然我会尽快将其全部升级,除此之外,将地穴外包到外部可能会更容易,因为我只在一个中使用它我的网站的常见位置。

任何意见表示赞赏。

马特·佩德尔斯登

---更新:2011年3月11日

更正之前给出的有关操作系统的评论... - 操作系统是 Windows Server 2008 SP1 64 位。抱歉,我应该仔细检查一下,而不是假设我记得!机器是 Dell 2950 8gb Ram、Xeon 处理器。

我开始沿着 Krtek 的建议思考 - 当系统变得不稳定时,如果我生成新的 crypt() (即一个非常简单的示例,我将变量设置为字符串,对其进行加密,然后与地穴进行比较) - 一切都很好。当我重新启动服务器时,一切又回到了之前的计算。所以我绝对倾向于更改用于计算 crypt() 结果的算法...有什么想法可能会导致这种情况发生吗?我打印了 CRYPT_STD_DES 等的值,它们在重新启动之间不会改变。

有人知道什么可能导致这种情况发生吗?

不管是什么,昨天似乎一天之内发生了两次,最奇怪的是。

感谢迄今为止的回答。

---更新:2011年3月16日

只是想提供另一个更新。

这种情况仍在发生,仍然没有进一步了解原因。

如果将来有人遇到这种情况,我认为我的解决方案将是进行一些令人讨厌的 hack,将所有 crypt() 执行推送到外部 C# 应用程序,而不必依赖 PHP 来完成它们。某处出了问题,此时我能看到的唯一解决方案是将其完全从方程中删除。

当然如果是的话still发生了,知道这也会很有趣! :)

谢谢大家。


你为什么读盐?你怎么得到盐?不同的算法使用不同的方法在输出中包含盐。

只需使用 crypt 函数的整个输出作为第二个参数:

  $crypted='Og12345678';
  if (crypt($_POST['password'], $crypted)==$crypted) {
      ....

那么单通道 DES 呢?真的吗?

上次我查看时,PHP crypt 实现将调用系统提供的 crypt() 函数 - 所以如果它损坏了,那么它更有可能是你的操作系统而不是 PHP - 但你没有说你的操作系统是什么。

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

PHP crypt() 返回错误答案 的相关文章

随机推荐

  • 如何仅在functions.auth.user().onCreate完成后完成登录

    我正在使用 firebase 函数 并且有一个在用户创建时添加新集合的函数 问题是有时用户在功能完成之前登录 因此用户已登录但尚未创建新集合 然后我收到错误消息 缺少或权限不足 因为规则找不到该集合 我该如何处理 仅当所有内容都来自时 是否
  • 在表格单元格内垂直拉伸 div - IE8

    如何在表格单元格内垂直拉伸 DIV 我想height 100 就可以了但在某些情况下 事实并非如此 至少在 IE8 中 这是一个简单的例子 一个 3 行表格 包含页眉 内容和页脚 我希望 内容 单元格内的 内容 DIV 垂直拉伸 100 在
  • 如何组合 kotlin 委托属性:可观察、可否决和“按映射”?

    我正在尝试结合代表 可观察的 https kotlinlang org api latest jvm stdlib kotlin properties delegates observable html with vetoable http
  • .NET Framework 4.0 安装程序是否也安装了 .NET 3.5?

    NET 4 0 旨在与 3 5 并行运行 并且不会运行 3 5 应用程序 这让我担心必须指示我的用户下载 NET 3 5 而不仅仅是 最新版本 我在一篇博客中读到 如果尚未安装 4 0 安装程序也会安装 3 5 但我现在无法测试它 有人尝试
  • 如何使用 XPath 和 Java 更新 XML

    我有一个 XML 文档以及该文档的 XPath 表达式 我必须在运行时使用 XPath 更新文档 我如何使用 Java 来做到这一点 下面是我的xml
  • pytorch 中图像分割的通道明智 CrossEntropyLoss

    我正在做图像分割任务 总共有 7 个类 所以最终的输出是像 batch 7 height width 这样的张量 它是一个 softmax 输出 现在直觉上我想使用 CrossEntropy 损失 但 pytorch 实现不适用于通道明智的
  • 当 PostgreSQL 停止时,TFDConnection.OnRecover 永远不会被触发

    我使用了 Firedac 连接恢复功能 如下所述恢复连接 FireDAC http docwiki embarcadero com RADStudio Rio en Recovering Connection FireDAC Delphi
  • 撤消 IntelliJ 智能结帐

    IntelliJ 有一个理论上非常酷的功能 称为智能结账 https blog jetbrains com idea 2012 03 simpler and more powerful ui for git branches 当您更改分支并
  • 如何在 Ruby 中的 Array 类中对数组的每个元素进行平方?

    我的部分代码如下 class Array def square self map num num 2 self end end 当我打电话时 1 2 3 square 我期望得到 1 4 9 但结果却得到 1 2 3 为什么会这样呢 当我打
  • 获取URL的所有文件夹

    您好 我正在尝试从给定服务器读取所有文件 我想做的事 读取所有文件夹 获取文件夹内的文件 URL 我尝试通过此方法获取服务器的文件夹和文件 但它返回了一个包含 MacBook 文件夹的数组 NSURL directory NSURL URL
  • WebApi 自定义授权属性不起作用

    我需要使用活动目录中的一个或多个特定用户来保护我的 Web api 在 web config 中我有以下代码
  • 如何检查表达式是否包含复杂表达式?

    有没有办法检查表达式是否包含复杂表达式 虚数 文档说你无法检查表达式是否包含I因为它是如何解释的 我也尝试过ImaginaryQ expr expr Conjugate expr and Simplify expr Simplify Con
  • SCons 问题 - 不理解 Variables 类

    我正在为一个项目开发 SConstruct 构建文件 并且尝试从选项更新为变量 因为选项已被弃用 我不明白如何使用变量 我有 0 python 经验 这可能是造成这一点的原因 例如 我有这个 opts Variables opts Add
  • zip 主文件夹,其中包含子文件夹

    我有一个文件夹 里面有一些文件和子文件夹 我将如何读取目录并压缩主文件夹 Ex maindirectory file 1 file 2 subdirectory 1 file 3 file 4 subdirectory 2 file 5 f
  • while循环中的Javascript continue语句导致无限循环

    我正在尝试创建一个while用 continue 语句循环 然而 它似乎导致了无限循环 我不明白为什么 在我看来 下面的代码应该以var tasksToDo然后在 3 处递减至 0 途中跳过数字 2 var tasksToDo 3 whil
  • PDF 文件的正确 MIME 媒体类型

    在处理 PDF 时 我遇到过 MIME 类型application pdf and application x pdf除其他外 这两种类型之间有区别吗 如果有的话 区别是什么 其中一个比另一个更受青睐吗 我正在开发一款网络应用程序 它必须提
  • 如何将dump文件夹导入mongodb数据库?

    我创建了一个mongo dump从远程服务器和 bson and 元数据文件存储到文件夹中 我想要import将此文件夹放入我的本地mongodb 我在用robomongo as a mongodb client ui 我收到一些命令 这些
  • Angular 2:从 ngFor 动态生成的输入中检索数据

    我正在生成一些input text 从数组中使用ngFor 我需要检索用户在其中插入的信息inputs并通过按钮发送到函数 我的代码是下一个 感谢您提前提供的任何帮助 div class container div class well w
  • .NET 中的泛型和鸭子类型 XML?

    我正在使用数据实例的一些 XML 表示形式 我正在使用 NET 序列化来反序列化对象 但我的灵魂中的某些东西因必须编写类来表示 XML 而感到不安 下面是我想做的 但我不知道语法或它是否甚至是可能的 考虑以下 dim xmlObject S
  • PHP crypt() 返回错误答案

    我想我在这里失去了理智 我的网站遇到了一个问题 它随机停止接受登录 我现在已经能够追踪到 crypt 的行为非常奇怪 在我的数据库中 我有用户密码的加密版本 所以假设是 Og12345678 当用户登录时 他们输入密码 我从数据库中读取盐