PHp 密码验证

2023-10-29

. MD5加密

string md5 ( string $str [, bool $raw_output = false ] )

参数

str  --  原始字符串。

raw_output  --  如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。

这是一种不可逆加密,执行如下的代码

$password = '123456'; echo md5($password); 得到结果是e10adc3949ba59abbe56e057f20f883e

2. Crype加密 string crypt ( string $str [, string $salt ] )

crypt() 返回一个基于标准 UNIX DES 算法或系统上其他可用的替代算法的散列字符串。

参数

str  --  待散列的字符串。

salt  --  可选的盐值字符串。如果没有提供,算法行为将由不同的算法实现决定,并可能导致不可预料的结束。

这是也一种不可逆加密,执行如下的代码

 

复制代码代码如下:

$password = '123456'; $salt = "test";// 只取前两个 echo crypt($password, $salt);  

得到的结果是teMGKvBPcptKo

使用自动盐值的例子如下:

 

复制代码代码如下:

$password = crypt('mypassword'); // 自动生成盐值 /* 你应当使用 crypt() 得到的完整结果作为盐值进行密码校验,以此来避免使用不同散列算法导致的问题。(如上所述,基于标准 DES 算法的密码散列使用 2 字符盐值,但是基于 MD5 算法的散列使用 12 个字符盐值。)*/ if (crypt('mypassword', $password) == $password) {    echo "Password verified!"; }  

执行结果是输出 Password verified!

以不同散列类型使用 crypt()的例子如下:

 

复制代码代码如下:

if (CRYPT_STD_DES == 1) {     echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n"; } if (CRYPT_EXT_DES == 1) {     echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n"; } if (CRYPT_MD5 == 1) {     echo 'MD5:          ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n"; } if (CRYPT_BLOWFISH == 1) {     echo 'Blowfish:     ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n"; } if (CRYPT_SHA256 == 1) {     echo 'SHA-256:      ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n"; } if (CRYPT_SHA512 == 1) {     echo 'SHA-512:      ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n"; }  

其结果如下

Standard DES: rl.3StKT.4T8M Extended DES: _J9..rasmBYk8r9AiWNc MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0 Blowfish:     $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi SHA-256:      $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6 SHA-512:      $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21 在 crypt() 函数支持多重散列的系统上,下面的常量根据相应的类型是否可用被设置为 0 或 1:

CRYPT_STD_DES - 基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。在盐值中使用非法的字符将导致 crypt() 失败。 CRYPT_EXT_DES - 扩展的基于 DES 算法的散列。其盐值为 9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的优先。0 到 63 被编码为 "./0-9A-Za-z"。在盐值中使用非法的字符将导致 crypt() 失败。 CRYPT_MD5 - MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。 CRYPT_BLOWFISH - Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。 CRYPT_SHA256 - SHA-256 算法使用一个以 $5$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。 CRYPT_SHA512 - SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

3. Sha1加密

string sha1 ( string $str [, bool $raw_output = false ] )

参数

str  --  输入字符串。

raw_output  --  如果可选的 raw_output 参数被设置为 TRUE,那么 sha1 摘要将以 20 字符长度的原始格式返回,否则返回值是一个 40 字符长度的十六进制数字。

这是也一种不可逆加密,执行如下代码:

$password = '123456'; echo sha1($password); 得到的结果是7c4a8d09ca3762af61e59520943dc26494f8941b

4. URL加密

string urlencode ( string $str )

此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码不同。

string urldecode ( string $str )

解码给出的已编码字符串中的任何 %##。 加号('+')被解码成一个空格字符。

这是一种可逆加密,urlencode方法用于加密,urldecode方法用于解密,执行如下代码:

$url = 'http://www.xxx.com/CraryPrimitiveMan/'; $encodeUrl = urlencode($url); echo $encodeUrl . "\n";// 如果是在网页上展示的,就将\n修改为<br/> echo urldecode($encodeUrl); 得到的结果如下

http%3A%2F%2Fwww.xxx.com%2FCraryPrimitiveMan%2F http://www.xxx.com/CraryPrimitiveMan/ 基于RFC 3986的加密URL的方法如下:

 

复制代码代码如下:

function myUrlEncode($string) {     $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');     $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");     return str_replace($entities, $replacements, urlencode($string)); }  

5. Base64信息编码加密

string base64_encode ( string $data )

使用 base64 对 data 进行编码。

设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。

Base64-encoded 数据要比原始数据多占用 33% 左右的空间。

string base64_decode ( string $data [, bool $strict = false ] )

对 base64 编码的 data 进行解码。

参数

data  --  编码过的数据。

strict  --  如果输入的数据超出了 base64 字母表,则返回 FALSE。

执行如下代码:

 

复制代码代码如下:

$name = 'CraryPrimitiveMan'; $encodeName = base64_encode($name); echo $encodeName . "\n"; echo base64_decode($encodeName);  

其结果如下

 

复制代码代码如下:

Q3JhcnlQcmltaXRpdmVNYW4= CraryPrimitiveMan  

推荐phpass

经 phpass 0.3 测试,在存入数据库之前进行哈希保护用户密码的标准方式。 许多常用的哈希算法如 md5,甚至是 sha1 对于密码存储都是不安全的, 因为骇客能够使用那些算法轻而易举地破解密码。

对密码进行哈希最安全的方法是使用 bcrypt 算法。开源的 phpass 库以一个易于使用的类来提供该功能。

 

复制代码代码如下:

<?php // Include phpass 库 require_once('phpass-03/PasswordHash.php') // 初始化散列器为不可移植(这样更安全) $hasher = new PasswordHash(8, false); // 计算密码的哈希值。$hashedPassword 是一个长度为 60 个字符的字符串. $hashedPassword = $hasher->HashPassword('my super cool password'); // 你现在可以安全地将 $hashedPassword 保存到数据库中! // 通过比较用户输入内容(产生的哈希值)和我们之前计算出的哈希值,来判断用户是否输入了正确的密码 $hasher->CheckPassword('the wrong password', $hashedPassword);  // false $hasher->CheckPassword('my super cool password', $hashedPassword);  // true ?> --------------------- 作者:lwj9494 来源:CSDN 原文:https://blog.csdn.net/li_lening/article/details/80917781 版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/v-nice/p/10081039.html

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

PHp 密码验证 的相关文章

  • PDO 和 Microsoft SQL:必须声明表变量“@P1”

    我正在尝试使用 PDO 中的绑定从 Microsoft SQL 数据库中选择一些条目 我正在使用的代码看起来与我在文档中找到的代码类似 但是 当我运行它时 我收到以下警告 警告 PDOStatement execute pdostateme
  • 当错误较多时,Laravel 不会显示错误。这是 Bug?

    重复的https github com laravel framework issues 31123 https github com laravel framework issues 31123 Laravel 版本 6 8 0 6 10
  • XDebug 与 Symfony 和 PhpStorm 不起作用(Ubuntu 安装)

    关于我的系统的事实乌班图15 10PHP 5 6 11交响乐2 7PhpStorm 10调试2 4我真的很难让 xdebug 在 PhpStorm 的 Symfony 项目下工作 我安装了xdebug 在我的 etc php5 apache
  • 未捕获的 ValueError:mysqli_stmt::execute():参数 #1 ($params) 必须是列表数组

    我试图通过这两个查询在我的数据库中插入准备好的语句多个值 这两个查询都发生故障 返回 未捕获的错误 调用未定义的方法 mysqli stmt bindValue 对于第一个代码或 未捕获的 ValueError mysqli stmt ex
  • 返回变量在 PHP 中不起作用(即没有返回值!)

    我更喜欢使用 Python 语言进行编程 但必须使用 PHP 来处理特定的网站应用程序项目 在 PHP 中 我试图将函数中的值 返回 到主程序环境 用于后续计算 但无论我尝试什么 函数中计算的值都不会返回该值 而是从函数中回显 工作正常 在
  • 如何从 Laravel 5 中的 Public/Images 文件夹中删除图像(URL 数据)

    如何从 laravel 5 中的 public images 文件夹中删除图像文件 我从这个网站找到了一些例子 但我知道他们只是在他们的文件中使用文件名record table 但我正在使用类似的东西URL e g localhost pr
  • php 在内容前插入十六进制字符数

    我正在将网站移动到新服务器 旧服务器有 php 5 3 2 新服务器有 php 5 5 9 Centos httpd Apache 2 2 26 我已经复制了文件 它工作正常 除了唯一奇怪的事情 一些奇怪的十六进制数字被插入到页面内容之前
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • 如何在 PHP 中正确分割路径

    执行以下操作的最佳方法是什么 我通过 AJAX 请求获取路径 e g dir1 dir2 dir3 dir4 我需要在我的网页上这样展示它 dir1 gt gt dir2 gt gt dir3 gt gt dir4 它们每个都是 html
  • PHP 警告 ZipArchive::extractTo():权限被拒绝

    我创建了一个应用程序 它使用 ZipArchive 类 php 中的标准 中的方法 extractTo 并在 Windows 7 上的本地主机 apache 服务器上对其进行了测试 没有任何问题 但是当我在一些unix生产服务器上尝试过它之
  • 将 SQL 中的数据存储在数组中

    我正在尝试将 sql 数据库中的数据存储到数组中 目前我有这个 query mysql query SELECT FROM InspEmail WHERE Company LIKE company while row mysql fetch
  • WAMP 不显示目录列表中的图标

    过去 我通过 vmware 处理 PHP 代码 但最近我决定转而通过 WAMP 在 Windows 8 1 上 在本地进行处理 我创建了一个空文件夹tests in the www folder 然后在我的浏览器上输入http localh
  • 如何使用 PDO 动态构建查询

    我正在使用 PDO 并想做这样的事情 query dbh gt prepare SELECT FROM table WHERE column value query gt bindParam table tableName query gt
  • 从多个选择列表中插入数据到mysql数据库(html形式)

    我制作了一个表格 其中有商店的 ID
  • php向多个收件人发送邮件

    我可以通过在邮件程序中定义 id 来将电子邮件发送到一个电子邮件 id 但是当用户在表单中键入 消息和电子邮件 id 时 我无法理解如何发送到多个收件人 例如 我正在显示一个带有两个文本区域的表单 一个用于电子邮件 ID 一个用于自定义消息
  • 使 div 的大小与其内部图像的大小相同

    我有一个带有以下代码的div HTML div img src img logo png div CSS div imgContainer width 250px height 250px padding 13px 问题是用户可以编辑图像大
  • PHP 除法浮点值问题

    当我尝试获取余数时 它给出了无效值 我试图获得两位小数的余数 我得到 3 4694469519536E 18 我的价值观是 x 0 1 y 0 005 我尝试了以下方法 echo ed fmod 0 1 0 005 OutPut 3 469
  • Laravel 5 注销特定用户

    在我的 laravel 5 应用程序中 有一个功能允许具有管理员角色的用户重置非管理员的任何人的密码 但这不会强制该人注销并再次登录 更改密码后如何强制用户注销 我没有对用于验证用户身份或任何内容的中间件进行任何更改 我不知道它是否有效 但
  • 哪个 PHP 5 版本最常用?

    当我开发将在不同配置的客户端 Web 服务 通常使用共享托管 上使用的应用程序时 我应该假设大多数 Web 服务器都具有哪个 PHP 5 版本 例如 5 2 x 5 3 x 等 在所有使用 PHP 版本 5 的网站中 有 84 9 使用版本
  • PHP 中的 Zip 流

    我有一个 PHP 脚本 可以动态创建 zip 文件并强制浏览器下载该 zip 文件 问题是 我可以直接将zip文件写入连接到用户浏览器的输出流 而不是先将其保存为服务器上的真实文件 然后发送文件吗 提前致谢 如果您的 Web 服务器运行的是

随机推荐

  • 实现最小栈

    题目要求 实现一个栈 要求实现Push 出栈 Pop 入栈 Min 返回最小值的操作 的时间复杂度为O 1 首先针对这道题有多重解决方案 1 定义两个栈 一个正常栈 另一个栈的栈顶始终保存整个栈内的最小值 思路如下 无论Push什么数据 正
  • BGI::detail::content用法详解及示例代码

    BGI detail content用法详解及示例代码 在C C 编程中 BGI Borland Graphics Interface 是一个用于图形绘制的库 它提供了一系列函数和工具 使开发者能够在DOS和Windows环境下创建图形界面
  • NumPy——输出向量和矩阵

    微信公众号 龙跃十二 我是小玉 一个平平无奇的小天才 我们都知道 NumPy是python学习和机器学习中非常重要的库 我们在学习过程中不可避免的使用到这个库 NumPy是Python中科学计算的基础包 它提供多维数组对象 各种派生对象 如
  • 一文搞懂Python的文件路径操作

    如果你要在代码里读取一个文件 那么你首先要知道这个文件的路径 如果只有一个文件 那么很简单 直接复制这个文件所在的文件夹路径及其文件名即可 而在很多情况下 我们会处理大量的文件 这些文件一般都会按一定的规则存放在一个或几个文件夹里 本文便是
  • cesium timeline时间改为系统时间(北京时间) vue版本

    效果图 初始化三维球后 追加如下代码 修改timeline时间 从珠联时间改为北京时间 initGlobel 省略初始化 this viewer animation viewModel dateFormatter this DateTime
  • linux卸载openjdk并安装jdk

    1 java version 查看是否安装 2 查看有哪些java安装文件 3 开始卸载 卸载掉下面两个 java version查看找不到java版本 就说明卸载成功了 如果卸掉下面两个还能看到java版本的话 就可以把第一个和第二个一起
  • python中字符串大小写判断和转换函数(upper,lower,capitalize,istitle)

    S为一字符串 可以使用python的内建函数对S中的字母大小写做判断和改变 supper lower和capitalize是转换函数 可以把字符串中的字母做相应的处理 istitle isupper和islower是判断函数 它们对字符串做
  • opencv+mfc搭建框架

    环境 vs2012 opencv2 49 功能 加载图片 保存 二值化 放大 缩小 旋转 实现方法 用opencv来实现相应的图像处理功能 用mfc的对话框来搭建框架 难点 在Mfc框架下显示图片 解决办法 根据父窗口与子窗口的关系 将op
  • VuforiaAR扫描3d物体

    Unity版本为2020 3 20 Vuforia版本为9 6 3 有偿demo 链接 https pan baidu com s 1YlmKeMWvMFRYPhieP3OrqQ 3D物体数据扫描 安卓机扫描3D物体的Scanner工具包下
  • C#的线性规划代码

    using System using System Collections Generic using System Linq using System Text using System Threading Tasks namespace
  • C语言实现RAND函数的方法

    C语言使用rand 一个值就可以实现生成一个伪随机数供我们使用 那么rand函数是如何实现的呢 我们自己可不可以编辑出来 其实是可以的 rand作为伪随机数发生器产生的是一个伪随机数 一般的用途能够满足 要想实现这个函数 需要用一个公式 x
  • Springboot使用Thymeleaf模板引擎无法加载css样式等静态资源

    我的项目文件目录如下 在使用thymeleaf模板引擎时访问不到css样式文件如下 其原因是Thymeleaf模板引擎引用文件需要按照规定的写法 如下 需使用th href属性 路径需使用 文件路径 包裹 加上后就可以看见样式了
  • 报表的发布

    各种不同的报表工具 其发布方式是不一样的 现在说说一些报表工具的发布方式 笔者对报表了解不多 可能有些认识上的错误 望大家指明 DevExpress公司出品的报表工具 XtraReport 它的报表设计器就是集成在VS NET集成开发环境中
  • 简单了解JVM 组成以及各部分

    简单介绍JVM各组成部分 图1 JVM组成部分 JVM包含两个子系统和两个组件 两个子系统 类加载子系统 Class loader 和执行引擎 Execution engine 两个组件 运行时数据区 Runtime data area 本
  • leetcode 1233. 删除子文件夹

    1233 删除子文件夹 难度中等142 你是一位系统管理员 手里有一份文件夹列表 folder 你的任务是要删除该列表中的所有 子文件夹 并以 任意顺序 返回剩下的文件夹 如果文件夹 folder i 位于另一个文件夹 folder j 下
  • Java集合框架

    文章目录 一 简介 1 集合框架介绍 2 相关容器介绍 2 1 Set相关 2 2 List相关 2 3 Queue相关 2 4 Map相关 3 集合重点 二 ArrayList分析 1 ArrayList使用 2 ArrayList介绍
  • MMCV/MMDet/MMDet3D 的版本对应

    MMDetection3D version MMDetection version MMSegmentation version MMCV version master mmdet gt 2 24 0 lt 3 0 0 mmseg gt 0
  • [Pytorch系列-65]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 无监督图像生成CycleGan的基本原理

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121962962 目录 第1章 什么是
  • 图片像素点统计

    最近这几天闲来无事 想起来18年12月末帮别人做了一个编程题 题目就是如何统计一张图片中的气泡数目 以及每个气泡的面积 上面这张图就是案例 里面白色的都是不规则形态的气泡 当拿到这个题目时看一眼就大致有些思路 因为怎么说也是学了数据结构的人
  • PHp 密码验证

    MD5加密 string md5 string str bool raw output false 参数 str 原始字符串 raw output 如果可选的 raw output 被设置为 TRUE 那么 MD5 报文摘要将以16字节长度