如何在 PHP 应用程序中供应 bcrypt(我应该)?

2023-11-24

我正在为一个相对成熟的开源PHP项目做出贡献。最近,我发现它将密码存储为纯 MD5 哈希值,这对我来说相当麻烦。我想如果我要修复它,我不妨做对(tm),所以我想使用 bcrypt。

首先,我对其他语言的发现:bcrypt-ruby似乎使用 OpenBSD 的原始 C 代码或jBCrypt的java代码。py-bcrypt是 BSD 代码的薄包装。BCrypt.net是一个直接港口jBCrypt.

现在,PHP 本身支持 bcrypt(尽管容易被误称为“blowfish”)地穴函数。不过5.3之前的版本需要系统本身的支持,一般由地穴河豚. phpass是一样的,建议安装 PHP 5.3 或Suhosin.

由于该应用程序的许多用户使用标准共享托管,因此我不想要求对服务器进行任何特殊配置。我本来希望只是从 PHP 5.3 版本中窃取代码,但它是用 C 语言编写的,并且(从我刚刚完成的少量阅读来看)我不能要求项目用户使用 C 扩展。

我想只创建一个 bcrypt 的纯 PHP 端口,但是看看jBCrypt的来源,我不确定我应该这样做,因为我对 PHP 或河豚都不太熟悉,而且这里的错误可能既危险又难以检测。

因此,我向您提出两个(多部分)问题:

  1. 我是否因为缺乏 PHP 知识而变得更加优秀?我真的可以使用已经创建的实现之一吗?
  2. 我应该创建一个简单的循环函数来调用sha1() or md5()重复某些可配置的次数?

我是否因为缺乏 PHP 知识而变得更加优秀?我真的可以使用已经创建的实现之一吗?

不幸的是,你是对的。在 5.3.0 之前,PHP 默认不支持 bcrypt。相反,它依赖于操作系统的支持(检查CRYPT_BLOWFISH持续的)。正如你所指出的Suhosin在这种情况下是一个选项。

我是否应该创建一个简单的循环函数来重复调用 sha1() 或 md5() 一些可配置的次数?

谈到密码学,最好的建议是“不要自己开发”。多次致电sha1() or md5() 可以不可以增加安全性。

另一方面,bcrypt 的作者解释了他们的设计决策这张纸.

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

如何在 PHP 应用程序中供应 bcrypt(我应该)? 的相关文章

随机推荐

  • 猴子补丁 Python 类

    我有一个类 位于一个单独的模块中 我无法更改它 from module import MyClass class ReplaceClass object MyClass ReplaceClass 除了这个文件之外 这不会改变 MyClass
  • 闭包在 for 和 foreach 循环中的行为不同

    在 C 中尝试闭包时 我发现如果它们在循环中捕获迭代器变量 它们的工作效果会相当出乎意料 var actions new List
  • 四叉树查找邻居

    我正在寻找一种算法来查找四叉树的邻居 在示例图像中 我得到了红色节点 如何找到蓝色节点 有任何想法吗 有一些已知的算法 去看一下 相泽邦夫等人 四叉树中的恒定时间邻居查找 实验结果 卡斯图里 瓦拉达拉詹 通过四叉树的所有最近邻居 罗伯特 约
  • 为什么我的 golang 通道会出现死锁错误?

    package main import fmt sync func push c chan int wg sync WaitGroup for i 0 i lt 5 i c lt i wg Done func pull c chan int
  • 相对于每组中的值的比例(通过 dplyr)

    我有一组时间序列 我想根据它们在特定时间间隔内的值来缩放它们 这样 每个系列当时都将处于 1 0 并按比例变化 我不知道如何用 dplyr 做到这一点 这是一个使用 for 循环的工作示例 library dplyr data expand
  • iOS11自定义导航栏高度

    首先感谢您来到这里并帮助解决我的问题 谢谢你 在iOS11 beta6中 sizeThatFits 似乎不适用于 UINavigationBar 我注意到 UINavigationBar 结构已通过 Reveal 我的应用程序更改 我已尽力
  • 使用 python range 生成整数递减列表

    这是一个简单的问题 我有 range 1 11 1 这给了我 10 9 8 7 6 5 4 3 2 1 有没有一种 更干净 的方法来生成上述列表 也许只有一个功能 你可以用它range 10 0 1
  • 使用着色器时,在 QGLWidget 中使用 QPainter 而不是 OpenGL

    许多 Qt 特别是 4 6 用户都会熟悉 OpenGL 教程中提供的 Overpainting 示例 我正在尝试做一些非常相似的事情 但使用纯 OpenGL 数据的着色器 而不是旧的固定功能管道 Set background and sta
  • Highstock 在 x 轴上使用数字而不是日期

    我需要在页面上输出一个绘图 我正在考虑海斯托克或 Highcharts 来实现这一点 Highstock 界面更可取 因为导航器窗格在重新缩放后显示了绘图的其余部分 然而 我的绘图在 x 轴上有数字 但没有日期 时间 有没有办法将 High
  • 为什么我在 nginx 反向代理上收到 404?

    下面是我的配置 除了well known路线 我不明白为什么 如果我提出请求http example tech connect我收到 404 如果我向http api example tech我也得到了404 我看不出我哪里出了问题 因为这
  • 如何在 DevOps 生命周期的开发阶段使用 docker?

    我有几个与 Docker 在开发阶段的使用相关的问题 我将提出三种不同的场景来说明如何在开发环境中使用 Docker 假设我们正在 Java 和 Spring Boot 中创建一个 REST API 为此 我需要一个 MySQL 数据库 第
  • 修剪 JavaScript 中的值

    我正在尝试修剪从剑道编辑器获得的文本 如下所示 var html nbsp T nbsp This sample text I get from Kendo editor console log Actual html var text t
  • Http 媒体流服务器

    我使用 RED5 媒体服务器 RTMP 开发了视频流应用程序 需要通过 HTTP 传输实时视频 而不是 RTMP 有开源 HTTP 媒体服务器吗 有没有同时支持RTMP和HTTP的开源服务器 提前致谢 首先 HTTP 和 RTMP 是不同的
  • 如何使用 jQuery SVG 插件设置 SVG 矩形元素的背景图像?

    我使用 keith wood 的 jQuery SVG 插件创建了一个 SVG 矩形 这是代码 svg graph wrapper rect group 0 100 40 20 fill ivory stroke black strokeW
  • spring security 线程中的当前用户

    您好 我在线程范围内使用 Spring Security 时遇到一些问题 System out println User SecurityContextHolder getContext getAuthentication getPrinc
  • 在 Windows 64 位计算机上安装 pyenchant

    我想安装 PyEnchant 进行拼写检查 它需要enchant安装在我的机器上 但我能找到的所有 exe 文件都是针对 win32 系统的 有没有其他方法可以在 Windows 64 位机器上安装它 目前 Enchant 没有 64 位版
  • 名称属性中包含特定文本的复选框的 jQuery 选择器

    我试图在 jQuery 中找到一个选择器 它选择所有作为复选框的输入 并且它们的名称包含特定单词 如 top 或 Top 由于选择其他复选框而遇到麻烦 是否可以使用类似的东西 input name top type checkbox eac
  • Numpy loadtxt:ValueError:列数错误

    文件 TEST txt 的结构如下 a 45 b 45 55 c 66 当我尝试打开它时 import numpy as np a np loadtxt r TEST txt delimiter t dtype str 我收到以下错误 Va
  • 动态添加的 SELECT 元素不会在 Internet Explorer 中触发 onchange 事件

    据我所知 这只在 Internet Explorer 中被破坏 我有一个脚本 可以创建多个动态 元素并为它们添加 onchange 事件 onchange 事件在 Firefox 中触发没有问题 但在 Internet Explorer 中
  • 如何在 PHP 应用程序中供应 bcrypt(我应该)?

    我正在为一个相对成熟的开源PHP项目做出贡献 最近 我发现它将密码存储为纯 MD5 哈希值 这对我来说相当麻烦 我想如果我要修复它 我不妨做对 tm 所以我想使用 bcrypt 首先 我对其他语言的发现 bcrypt ruby似乎使用 Op