使用 PDO 准备语句插入密码哈希

2024-01-08

在基本的 mysql 插入中,您可以设置密码变量“PASSWORD($password)”,但这会破坏 PDO 语句。

使用 pdo::prepare 和 pdo::execute 时如何散列密码?

$sql= "INSERT INTO contractors (userid, password, name) VALUES ('$userid', '$pass1', '$name')";
$result = $dbh->prepare($sql);
$count = $result->execute();

Echo $count."<br>";

我真是个n00b,一个简单的注册页面花了我两天时间。欢迎幼儿园的答案。

thanks,


Note

这个答案最初推荐使用无盐哈希。现在这很愚蠢,所以它被重写以将其带入现代。请注意旧内容中类似的现在很糟糕的答案。

您正在使用 PDO,因此您应该使用带有占位符的参数化查询:

$sql= "INSERT INTO contractors (userid, password, name) VALUES (?, ?, ?)";
$result = $dbh->prepare($sql);
$count = $result->execute(array($userid, $pass1, $name));

echo $count."<br>";

在现代,你应该河豚/bcrypt而不是 MD5 或 SHA1。从 PHP 5.3 开始,您可以使用crypt http://php.net/crypt$2y$字首。从 PHP 5.5 开始,您将能够使用password_hash http://php.net/password_hash反而。您可以使用ircmaxell 的password_compat 库 https://github.com/ircmaxell/password_compat同时。

这是一个使用的演示crypt and a very low难度值。请注意,我们还存储了盐。虽然我在此演示中对盐进行了硬编码,但您应该为每个用户使用唯一的盐。

$salt = 'saltysaltsaltsalt'; 
$password_hash = crypt($pass1, '$2a$07$' . $salt);
$sql= "INSERT INTO contractors (userid, password, salt, name) VALUES (?, ?, ?, ?)";
$result = $dbh->prepare($sql);
$count = $result->execute(array($userid, $password_hash, $salt, $name));

echo $count."<br>";

验证密码就像使用相同参数重建哈希一样简单。

$sth = $dbh->prepare('SELECT password, salt FROM contractors WHERE userid = ?');
$sth->execute(array($userid));
list($existing_hash, $salt) = $sth->fetch(PDO::FETCH_NUM);
unset($sth);

$new_hash = crypt($pass1, '$2a$07$' . $salt);
if($new_hash === $existing_hash) {
    echo "Password matched.";
} else {
    echo "Password did not match.";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PDO 准备语句插入密码哈希 的相关文章

  • 简单的 PHP 回显代码不起作用

    这是我的 html 和 php 脚本 h1 Bob s Auto Parts h1 table width 100 tr tr table 为什么这个输出会出现一个 gt 我希望它是 这有效 仅有的 这是输出 鲍勃的汽车零件 鲍勃
  • php中的条件格式化html表与时间戳比较

    echo table style width 100 tr echo td Order td echo td Destination td echo td Location td echo td Status td echo td Time
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 从类似 cronjob 的语法创建“下次运行时间”日期

    在我正在创建的应用程序中 用户可以安排重复任务 生成间隔模式的简单值是 Minute 0 59 90 each minute Hour 0 23 90 each hour Day of month 1 31 90 each day of m
  • 在 PHP 中比较两个对象的最快方法是什么?

    假设我有一个对象 在本例中为 User 对象 并且我希望能够使用单独的类来跟踪更改 用户对象不必以任何方式改变它的行为才能发生这种情况 因此 我的单独的类创建它的 干净 副本 将其存储在本地某个位置 然后可以将 User 对象与原始版本进行
  • 如何防止在 PHP 中使用超出“使用”范围的特征方法

    我想知道是否有任何方法可以防止在 PHP 的任何类上下文之外使用特征方法 让我用一个简短的例子来解释我想要什么 这是我当前的代码 File MyFunctions php trait MyFunctions function hello w
  • MySQL:@@ 是什么意思?

    我正在阅读本页上的 MySQL 文档 http dev mysql com doc refman 5 1 en set statement html http dev mysql com doc refman 5 1 en set stat
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • 条件触发器的Django迁移sql

    我想创建一个触发器 仅在满足条件时插入表 我尝试过使用 IF BEGIN END 和 WHERE 的各种组合 但 Django 每次都会返回 SQL 语法错误 这里 type user id指的是触发该事件的人 user id指的是接收到通
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 在哪里可以找到 tesseract->setvariable 函数的第一个参数的可用属性名称列表?

    从大量的目光中我只能找到其中的一小部分 如下面的 tesseract 的 setVariable 1st param 2nd param 示例 tesseract gt SetVariable tessedit char whitelist
  • 在 Julia 中将 CartesianIndex 数组转换为二维矩阵

    假设我们在 Julia 中有一个笛卡尔索引数组 julia gt typeof indx Array CartesianIndex 2 1 现在我们想使用 PyPlot 将它们绘制为散点图 所以我们应该转换indx 笛卡尔数组到二维矩阵 因
  • 我需要释放这些对象吗?

    我正在使用 Delphi 1 16 位来学习 Pascal 别笑 它工作得很好 而且我买不起更新的版本 我使用 TList 来保存简单地址簿的对象引用 每个对象都添加到 TList 中 如下所示 DataList Add TAddrBook
  • Google App Engine Cloud Endpoints Pr@blem 标记 -> 在干净的 Android 项目上生成 App Engine 错误

    我创建了一个干净的 Android 应用程序A然后我右键单击它并选择Google gt Generate App Engine这导致了这个 错误描述是 Description Resource Path Location Type Ther
  • Java - 如何将 String 设置为 static int

    我有一个只接受字符串的方法 public void setVerticalAlignment String align gd verticalAlignment align accepts only int But gd verticalA
  • tcsh 脚本不退出

    我正在运行 CentOS 7 并且 tcsh 脚本出现问题 我有一个名为 quittest 的简单脚本 bin tcsh echo Simple Test exit 0 当我从终端运行 quittest 时 我得到 Simple Test
  • Azure Functions 和 IHealthCheck

    我需要对 Azure Functions 实施运行状况检查 https learn microsoft com en us aspnet core host and deploy health checks view aspnetcore
  • 如何让这个很长的网址显得很短?

    我已将大部分网站设置为 SE 友好型 但网站的一部分让我感到厌烦 我在其中一个页面中有一个巨大的表单 提交表单 action php page 时 URL 太长 一行包含了半个 word 文档 其中包含所有传递的变量 这是非常丑陋的 有什么
  • 如何在SQL Server中存储unicode字符?

    在 SQL Server 中 我试图创建一个可以存储 unicode 字符的表 具体是这个 https www fileformat info info unicode char 0144 index htm https www filef
  • Python 函数相当于 R 的“pretty()”?

    我正在用 Python 复制一些 R 代码 我被 R 绊倒了pretty 我所需要的只是pretty x where x是一些数字 粗略地说 该函数将 计算漂亮的断点 作为多个 轮 值的序列 我不确定是否有 Python 的等价物 而且我在
  • Google 登录签名的 apk 无法正常工作

    好吧 直到我生成签名的 apk 为止 一切正常 我按照谷歌开发者页面上的说明进行了整个过程 1 我生成了 google services json 文件 其中包含 keyhash 和包名称2 像这样包含所有类级别和应用程序级别依赖项 Top
  • 删除重复项并附带警告

    我有一个包含 rowID 经度 纬度 businessName url 标题的表 这可能看起来像 rowID long lat businessName url caption 1 20 20 Pizza Hut yum com null
  • Angular-UI 全局键绑定

    我已经开始使用 angular ui 按键模块 并且想知道是否有一种方法可以使全局快捷键无论我放置在体内的哪个位置都可以工作 我尝试将 ui keydown 链接到正文 但由于它没有焦点 因此不会触发关键事件 eg 我知道我可以只关注一个
  • 在C++中,当我需要使用枚举时,如何避免#include头文件?

    在我的 C 头文件中 我尝试使用前向声明 class MyClass 而不是 include 类头 正如许多 C 编码标准中所建议的那样 Google C 样式指南就是其中之一 不幸的是 当我引入枚举时 我无法再进行前向声明了 像这样 my
  • 如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写

    在构建我的应用程序时 我通过运行使用了 Laravel 身份验证脚手架php artisan make auth这很棒 节省了我很多时间 但是 我遇到了用户无法登录的问题 因为他们不记得最初注册时使用的电子邮件大小写 例如 注册的用户 em
  • Wix Burn:自定义引导程序升级,但与旧版本并排安装

    我正在努力解决自定义引导程序升级问题 依照指示这个线程 https stackoverflow com questions 17676657 wix burn bootstrapper majorupgrade 我正在使用 LaunchAc
  • 弹出窗口显示片段中的一些内容

    我正在尝试制作类似弹出窗口的东西 当单击片段中的视图时会出现该窗口 我希望这个弹出窗口或其他任何东西不要使片段变暗 就像对话框片段那样 我还希望弹出窗口位于单击视图的位置 如果它有自己的活动和布局那就太好了 这样我就可以在其中进行一些自定义
  • 无法在 Rails 4 中批量分配受保护的属性

    我无法理解我的代码有什么问题 Rails 4 帖子中的参数 name gt name 新行动 m Menu new params permit name 此代码的最后一行生成 无法为菜单批量分配受保护的属性 名称 在 Rails 4 中使用
  • 尝试在 IE11 中打开为程序生成的 PDF 生成的 URL 时显示“访问被拒绝”

    对于我正在开发的应用程序 我们有一个功能 可以在服务器端为对象生成报告 并在客户端的新选项卡 暂时 中打开它 我正在使用URL createObjectURL函数创建一个 URLBlob 它由 AJAX 调用的结果组成 每当一个 windo
  • 使用 PDO 准备语句插入密码哈希

    在基本的 mysql 插入中 您可以设置密码变量 PASSWORD password 但这会破坏 PDO 语句 使用 pdo prepare 和 pdo execute 时如何散列密码 sql INSERT INTO contractors