- PHP 教程
- PHP - 首页
- PHP - 简介
- PHP - 安装
- PHP - 历史
- PHP - 特性
- PHP - 语法
- PHP - Hello World
- PHP - 注释
- PHP - 变量
- PHP - Echo/Print
- PHP - var_dump
- PHP - $ 和 $$ 变量
- PHP - 常量
- PHP - 魔术常量
- PHP - 数据类型
- PHP - 类型转换
- PHP - 类型混杂
- PHP - 字符串
- PHP - 布尔值
- PHP - 整数
- PHP - 文件与 I/O
- PHP - 数学函数
- PHP - Heredoc 和 Nowdoc
- PHP - 复合类型
- PHP - 文件包含
- PHP - 日期和时间
- PHP - 标量类型声明
- PHP - 返回类型声明
- PHP 运算符
- PHP - 运算符
- PHP - 算术运算符
- PHP - 比较运算符
- PHP - 逻辑运算符
- PHP - 赋值运算符
- PHP - 字符串运算符
- PHP - 数组运算符
- PHP - 条件运算符
- PHP - 展开运算符
- PHP - 空值合并运算符
- PHP - 比较运算符(太空船运算符)
- PHP 控制语句
- PHP - 决策
- PHP - If…Else 语句
- PHP - Switch 语句
- PHP - 循环类型
- PHP - For 循环
- PHP - Foreach 循环
- PHP - While 循环
- PHP - Do…While 循环
- PHP - Break 语句
- PHP - Continue 语句
- PHP 函数
- PHP - 函数
- PHP - 函数参数
- PHP - 按值传递
- PHP - 按引用传递
- PHP - 默认参数
- PHP - 具名参数
- PHP - 可变参数
- PHP - 返回值
- PHP - 传递函数
- PHP - 递归函数
- PHP - 类型提示
- PHP - 变量作用域
- PHP - 严格类型
- PHP - 匿名函数
- PHP - 箭头函数
- PHP - 可变函数
- PHP - 局部变量
- PHP - 全局变量
- PHP 超全局变量
- PHP - 超全局变量
- PHP - $GLOBALS
- PHP - $_SERVER
- PHP - $_REQUEST
- PHP - $_POST
- PHP - $_GET
- PHP - $_FILES
- PHP - $_ENV
- PHP - $_COOKIE
- PHP - $_SESSION
- PHP 文件处理
- PHP - 文件处理
- PHP - 打开文件
- PHP - 读取文件
- PHP - 写入文件
- PHP - 文件是否存在
- PHP - 下载文件
- PHP - 复制文件
- PHP - 追加文件
- PHP - 删除文件
- PHP - 处理 CSV 文件
- PHP - 文件权限
- PHP - 创建目录
- PHP - 列出文件
- 面向对象的 PHP
- PHP - 面向对象编程
- PHP - 类和对象
- PHP - 构造函数和析构函数
- PHP - 访问修饰符
- PHP - 继承
- PHP - 类常量
- PHP - 抽象类
- PHP - 接口
- PHP - 特性
- PHP - 静态方法
- PHP - 静态属性
- PHP - 命名空间
- PHP - 对象迭代
- PHP - 封装
- PHP - final 关键字
- PHP - 重载
- PHP - 克隆对象
- PHP - 匿名类
- PHP Web 开发
- PHP - Web 概念
- PHP - 表单处理
- PHP - 表单验证
- PHP - 表单邮件/URL
- PHP - 完整表单
- PHP - 文件包含
- PHP - GET 和 POST
- PHP - 文件上传
- PHP - Cookie
- PHP - Session
- PHP - Session 选项
- PHP - 发送邮件
- PHP - 输入过滤
- PHP - Post-Redirect-Get (PRG)
- PHP - 闪存消息
- PHP 高级
- PHP - MySQL
- PHP.INI 文件配置
- PHP - 数组解构
- PHP - 编码规范
- PHP - 正则表达式
- PHP - 错误处理
- PHP - Try…Catch
- PHP - Bug 调试
- PHP - 针对 C 开发者
- PHP - 针对 PERL 开发者
- PHP - 框架
- PHP - Core PHP 与框架
- PHP - 设计模式
- PHP - 过滤器
- PHP - JSON
- PHP - 异常
- PHP - 特殊类型
- PHP – 哈希算法
- PHP - 加密
- PHP - is_null() 函数
- PHP - 系统调用
- PHP - HTTP 认证
- PHP - 交换变量
- PHP - Closure::call()
- PHP - 过滤后的 unserialize()
- PHP - IntlChar
- PHP - CSPRNG
- PHP - 期望
- PHP - use 语句
- PHP - 整数除法
- PHP - 已弃用的特性
- PHP - 已移除的扩展和 SAPI
- PHP - PEAR
- PHP - CSRF
- PHP - FastCGI 进程
- PHP - PDO 扩展
- PHP - 内置函数
- PHP 有用资源
- PHP - 速查表
- PHP - 问答
- PHP - 快速指南
- PHP - 在线编译器
- PHP - 有用资源
- PHP - 讨论
PHP – 哈希算法
“哈希”一词表示一种加密数据(特别是文本)以获得固定长度值的技术。PHP 库包含许多函数,可以通过应用不同的哈希算法(例如 md5、SHA2、HMAC 等)对数据执行哈希操作。获得的加密值称为原始密钥的哈希值。
哈希处理是一个单向过程,这意味着不可能反转哈希以获得原始密钥。
哈希的应用
哈希技术有效地用于以下目的:
密码认证
我们经常注册各种在线应用程序,例如 Gmail、Facebook 等。您需要填写一个表单,在其中为在线帐户创建密码。服务器会对您的密码进行哈希处理,并将哈希值存储在数据库中。登录时,提交的密码将被哈希处理,并与数据库中的密码进行比较。这可以保护您的密码不被窃取。
数据完整性
哈希的一个重要用途是验证数据是否未被篡改。当从互联网下载文件时,会显示其哈希值,您可以将其与下载的文件进行比较,以确保文件未被损坏。
哈希的过程
哈希过程可以用下图表示:
PHP 中的哈希算法
PHP 支持多种哈希算法:
MD5 − MD5 是一种 128 位哈希函数,广泛用于软件中以验证传输文件的完整性。128 位哈希值通常表示为 32 位十六进制数。例如,单词“frog”始终生成哈希值“8b1a9953c4611296a827abf8c47804d7”
SHA − SHA 代表安全哈希算法。它是美国国家标准与技术研究院 (NIST) 开发的一系列标准。SHA 是 MD5 的修改版本,用于对数据和证书进行哈希处理。SHA-1 和 SHA-2 是该算法的两个不同版本。SHA-1 是一种 160 位哈希算法。SHA-2 实际上是一个哈希“系列”,具有各种长度,最流行的是 256 位。
HMAC − HMAC(基于哈希的消息验证码)是一种加密认证技术,它使用哈希函数和密钥。
HKDF − HKDF 是一种基于 HMAC 消息验证码的简单密钥派生函数 (KDF)。
PBKDF2 − PBKDF2(基于密码的密钥派生函数 2)是一种哈希算法,它根据密码创建加密密钥。
PHP 中的哈希函数
PHP 库包含多个哈希函数:
hash_algos 函数
此函数返回一个包含支持的哈希算法列表的数字索引数组。
hash_algos(): array
hash_file 函数
该函数返回一个字符串,其中包含计算出的消息摘要,以小写十六进制表示。
hash_file( string $algo, string $filename, bool $binary = false, array $options = [] ): string|false
algo 参数是所选哈希算法的类型(即“md5”、“sha256”、“haval160,4”等)。filename 是描述要哈希的文件位置的 URL;支持 fopen 包装器。
示例
请看下面的例子:
<?php /* Create a file to calculate hash of */ $fp=fopen("Hello.txt", "w"); $bytes = fputs($fp, "The quick brown fox jumped over the lazy dog."); fclose($fp); echo hash_file('md5', "Hello.txt"); ?>
它将产生以下输出:
5c6ffbdd40d9556b73a21e63c3e0e904
hash() 函数
hash() 函数生成哈希值(消息摘要):
hash( string $algo, string $data, bool $binary = false, array $options = [] ): string
algo 参数是所选哈希算法的类型(即“md5”、“sha256”、“haval160,4”等)。data 参数是要哈希的消息。如果 binary 参数为“true”,则输出原始二进制数据;“false”输出小写十六进制数。
示例
该函数返回一个字符串,其中包含计算出的消息摘要,以小写十六进制表示。
<?php echo "Using SHA256 algorithm:" . hash('sha256', 'The quick brown fox jumped over the lazy dog.'). PHP_EOL; echo "Using MD5 algorithm:",hash('md5', 'The quick brown fox jumped over the lazy dog.'), PHP_EOL; echo "Using SHA1 algorithm:" . hash('sha1', 'The quick brown fox jumped over the lazy dog.'); ?>
它将产生以下输出:
Using SHA256 algorithm:68b1282b91de2c054c36629cb8dd447f12f096d3e3c587978dc2248444633483 Using MD5 algorithm:5c6ffbdd40d9556b73a21e63c3e0e904 Using SHA1 algorithm:c0854fb9fb03c41cce3802cb0d220529e6eef94e