草庐IT

php crypt() 河豚盐长度向后兼容

coder 2024-04-06 原文

我使用 crypt() 来散列密码,使用像这样的河豚盐:

$2a$, 2 digits, $, 21 chars in [a-zA-Z0-9]

这里我犯了一个错误,第三个 $ 之后的字符长度是 21 而不是 22。但它工作正常,所以我没有发现错误。

它适用于我运行 Windows 和 php 5.4.4 的桌面,以及运行 Amazon linux 和 php 5.3.x 的 AWS ec2,盐太短。

有一天我将 AWS php 更新到 5.5.14。然后问题发生了。 crypt() 始终返回 *0。

经过一些尝试,我在 salt 的末尾添加了一个 $,所以它变成了 22 个字符。它再次工作并返回与以前相同的哈希字符串。虽然它不遵守河豚规则,但字符应该是 [./a-zA-Z0-9]

但是现在我将这个站点复制到另一台运行 openSuSE 13.1 和 php 5.5.14 的机器上,这个 salt 又失败了。

我将 php 降级到 5.4.20 但没有帮助。

新站点仍然需要旧数据库,因此我必须使密码哈希有效。

影响此河豚盐长度错误兼容性问题的库或模块是什么? tt好像不是PHP的版本。 AWS 5.5.14

或者有没有其他魔法炭可以再次拯救我?我尝试将尾部 $ 替换为 [./a-zA-Z0-9] 中的每个尾部,但不走运,哈希字符串不同....

最佳答案

首先我强烈推荐使用新函数password_hash()password_verify()生成和验证新的哈希值。当然,这并不能解决旧散列的实际问题,但将它们标记为旧散列可能是个好主意,这样它们就可以在用户下次登录时更新。

对于这个旧哈希,我会尝试验证它们,生成一个具有有效最后字符 22 的盐。crypt 函数实际上只使用字符 22 的部分位(盐的 126 位而不是 128 位)。因此,最后一个字符 22 的组将以相同的哈希值结束。

查看此问题的答案Why does crypt/blowfish generate the same hash...

如果您将所有相关字符 [.Oeu] 都作为字符 22 进行尝试,那么一个组合很可能会生成与您的无效盐相同的结果。

编辑:

由于使用的盐成为密码哈希的一部分,您应该能够看到用作字符 22(第三个 $ 之后的第 22 个字符)的内容。

关于php crypt() 河豚盐长度向后兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799946/

有关php crypt() 河豚盐长度向后兼容的更多相关文章

  1. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  2. ruby-on-rails - 不兼容的库版本 : nokogiri. bundle 需要 8.0.0 或更高版本,但 libiconv.2.dylib 提供 7.0.0 版本 - 2

    为了在我的mac上为一个rails项目安装mysql,我遵循了安装Homebrew软件和删除mac端口的在线建议。这是问题开始的地方。rails项目不会构建,我得到这个:[rake--prereqs]rakeaborted!dlopen(/Users/Parker/.rvm/gems/ruby-1.9.3-p448/gems/nokogiri-1.6.0/lib/nokogiri/nokogiri.bundle,9):Librarynotloaded:/opt/local/lib/libiconv.2.dylibReferencedfrom:/Users/Parker/.rvm/gem

  3. ruby - 用于 CSS3 跨浏览器兼容性的 SASS 插件? - 2

    是否有一个SASS扩展可以采用SASS样式表,找到中性属性(例如border-radius)并为其输出所有特定于供应商的属性(例如-webkit-border-radius等)自动?我真的不想手动创建所有混入,也不想手动编写代码。我确定一定有这样的扩展名,但我找不到它。帮忙? 最佳答案 有一个非常好的gem可以满足您的需求。它叫做Bourbon它不会用特定于供应商的css替换您的css,因为它可以像SASS一样工作。它基本上是一个正确生成跨浏览器css的mixin集合。 关于ruby-用

  4. ruby - 我在哪里可以找到与其兼容的 Ruby 版本的 gems 版本号? - 2

    这个问题说明了一切。例如,我有一台安装了ruby​​1.8.6的服务器。当我尝试sudogeminstallroo时,它给出了错误nokogirirequiresRubyversion>=1.8.7。所以,我想安装与Ruby1.8.6兼容的旧版本roo。但我不知道去哪里搜索。我知道RubyForge,但它也没有说明Ruby的兼容版本。 最佳答案 蛮力方法是获取一个git克隆,搜索它指定的Ruby版本的位置,然后使用gitblame甚至gitpickaxe来确定最后一个没有的版本'没有那个要求。

  5. ruby - Jekyll 与 .erb 的兼容性 - 2

    据我了解,Jekyll兼容Liquid和YAML。但是,是否有插件或可用功能可以使其与.erb(嵌入式Ruby)文件兼容?否则,这是一个不必要的功能还是没有用的东西?Jekyll对Liquid和YAML的内置使用是否会取代.erb将会或可以做什么?谢谢! 最佳答案 使用.erb不适合jekyll,但是你应该使用jekyll-renderinggem。 关于ruby-Jekyll与.erb的兼容性,我们在StackOverflow上找到一个类似的问题: http

  6. ruby - ruby 命令行开关 -rubygems & -r 不兼容吗? - 2

    我最近将一个ruby​​库转换为一个gem,这似乎破坏了命令行的可用性作为图书馆工作得很好$ruby-rfoobar-e'pFooBar.question'#=>"answer"作为一个gem,irb知道如何从命令行开关中请求一个gem$irb-rubygems-rfoobarirb(main):001:0>FooBar.question#=>"answer"但对于ruby​​本身来说同样失败了:$ruby-rubygems-rfoobar-e'pFooBar.question'ruby:nosuchfiletoload--foobar(LoadError)我现在必须这样做吗,这看起来

  7. Ruby 不兼容的字符编码 - 2

    我目前正在尝试编写一个脚本来遍历输入文件并检查网站上的数据。如果它找到新数据,它会打印到它通过的终端,如果没有,它会告诉我它失败了。反之亦然删除的数据。它工作正常,直到我收到的输入文件包含“™”字符。然后当ruby​​到达该行时,它会吐出一个错误:PDAPWeb.rb:73:in`include?':incompatiblecharacterencodings:UTF-8andIBM437(Encoding::CompatibilityError)违规行是一个简单的检查,以查看该文本是否存在于页面上。ifbrowser.text.include?(program_name)其中prog

  8. ruby - 不兼容的 marshal 文件格式(无法读取)需要格式版本 4.8; 0.0 给出 - 2

    我收到以下错误:incompatiblemarshalfileformat(can'tberead)formatversion4.8required;0.0given在这一行:从我的布局文件的这一部分:true%>true%>我以前从来没有遇到过这个问题,网上的解释对我来说太高级了,或者与制作游戏的人有关,我的项目是一个简单的rails应用程序,我昨天才开始。 最佳答案 您尝试过清算Assets吗?bundleexecrakeassets:clean然后重新编译:bundleexecrakeassets:precompile您是否以

  9. ruby 1.9 + sinatra 不兼容的字符编码 : ASCII-8BIT and UTF-8 - 2

    我正在尝试将sinatra应用程序迁移到ruby​​1.9我正在使用sinatra1.0、rack1.2.0和erb模板当我启动sinatra时它可以工作,但是当我从浏览器请求网页时出现此错误:Encoding::CompatibilityErrorat/incompatiblecharacterencodings:ASCII-8BITandUTF-8所有.rb文件都有这个标题:#!/usr/bin/envruby#encoding:utf-8我认为问题出在erb文件中,即使它显示它是UTF-8编码[user@localhostviews]$filehome.erbhome.erb:U

  10. vue3.0 + vite2.0+如何兼容低版本浏览器 - 2

    这里写自定义目录标题一、问题二、解决三、解决方案四、打包预览一、问题在使用vue3.2和vite2开发一个移动端或者钉钉端H5微服务iosapp内置浏览器打开没问题安卓app内置浏览器打开空白页面vconsole打印出现报错globalthisundefind二、解决内置浏览器版本比较低打印出来是63vue3代码不兼容低版本浏览器三、解决方案步骤一:vite.config.ts里build.target配置项指定构建目标为es2015或者步骤二:安装@vitejs/plugin-legacy安装完报错也还在指定版本可以解决“@vitejs/plugin-legacy”:“1.8.0”,步骤三:

随机推荐