hash扩展

hash扩展是PHP核心的一部分,使用hash扩展中的函数不需要安装扩展

hash是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,PHP的hash扩展提供一些hash算法

hash算法一般是非可逆的,常用作数据签名

1.查看自己的PHP环境支持的hash算法

<?php
/**
 * Created by PhpStorm.
 * User: Jiang Haiqiang
 * Date: 2020/7/7
 * Time: 10:53 PM
 */

$algoList = hash_algos();
var_dump($algoList);

作者的环境输出

array(52) {
  [0]=>
  string(3) "md2"
  [1]=>
  string(3) "md4"
  [2]=>
  string(3) "md5"
  [3]=>
  string(4) "sha1"
  [4]=>
  string(6) "sha224"
  [5]=>
  string(6) "sha256"
  [6]=>
  string(6) "sha384"
  [7]=>
  string(10) "sha512/224"
  [8]=>
  string(10) "sha512/256"
  [9]=>
  string(6) "sha512"
  [10]=>
  string(8) "sha3-224"
  [11]=>
  string(8) "sha3-256"
  [12]=>
  string(8) "sha3-384"
  [13]=>
  string(8) "sha3-512"
  [14]=>
  string(9) "ripemd128"
  [15]=>
  string(9) "ripemd160"
  [16]=>
  string(9) "ripemd256"
  [17]=>
  string(9) "ripemd320"
  [18]=>
  string(9) "whirlpool"
  [19]=>
  string(10) "tiger128,3"
  [20]=>
  string(10) "tiger160,3"
  [21]=>
  string(10) "tiger192,3"
  [22]=>
  string(10) "tiger128,4"
  [23]=>
  string(10) "tiger160,4"
  [24]=>
  string(10) "tiger192,4"
  [25]=>
  string(6) "snefru"
  [26]=>
  string(9) "snefru256"
  [27]=>
  string(4) "gost"
  [28]=>
  string(11) "gost-crypto"
  [29]=>
  string(7) "adler32"
  [30]=>
  string(5) "crc32"
  [31]=>
  string(6) "crc32b"
  [32]=>
  string(6) "fnv132"
  [33]=>
  string(7) "fnv1a32"
  [34]=>
  string(6) "fnv164"
  [35]=>
  string(7) "fnv1a64"
  [36]=>
  string(5) "joaat"
  [37]=>
  string(10) "haval128,3"
  [38]=>
  string(10) "haval160,3"
  [39]=>
  string(10) "haval192,3"
  [40]=>
  string(10) "haval224,3"
  [41]=>
  string(10) "haval256,3"
  [42]=>
  string(10) "haval128,4"
  [43]=>
  string(10) "haval160,4"
  [44]=>
  string(10) "haval192,4"
  [45]=>
  string(10) "haval224,4"
  [46]=>
  string(10) "haval256,4"
  [47]=>
  string(10) "haval128,5"
  [48]=>
  string(10) "haval160,5"
  [49]=>
  string(10) "haval192,5"
  [50]=>
  string(10) "haval224,5"
  [51]=>
  string(10) "haval256,5"
}

通过以上输出,我们可以看到我们常用的hash算法md5sha1sha256等。

2.对字符串进行hash运算

<?php

$data = 'Jhq';
echo md5($data).PHP_EOL;
echo hash('md5', $data).PHP_EOL;
echo sha1($data).PHP_EOL;
echo hash('sha1', $data).PHP_EOL;

以上例程输出

0af598817454940472f92cbb9eafd2d3
0af598817454940472f92cbb9eafd2d3
d688d0d1393b796479878586c48ebc415327d159
d688d0d1393b796479878586c48ebc415327d159

我们可以看到,我们常用的hash算法,PHP已经提供更友好的调用方式,但是同样可以通过调用hash方法实现,两种调用方式的结果是一致的。

3.对文件进行hash运算

我们创建文件hash.txt,文件内容如下

Jhq

对hash.txt进行hash运算

<?php
echo md5_file(__DIR__.'/hash.txt').PHP_EOL;
echo hash_file('md5',__DIR__.'/hash.txt').PHP_EOL;
echo sha1_file(__DIR__.'/hash.txt').PHP_EOL;
echo hash_file('sha1',__DIR__.'/hash.txt').PHP_EOL;

以上例程输出

0af598817454940472f92cbb9eafd2d3
0af598817454940472f92cbb9eafd2d3
d688d0d1393b796479878586c48ebc415327d159
d688d0d1393b796479878586c48ebc415327d159

我们可以看到,对文件进行hash运算时,常用的hash算法PHP也提供了友好的调用方式,同样也可以调用hash_file实现,两种实现方式一致。

另外,我们两次对内容Jhq进行hash运算,一种是通过对字符串,另一种是对文件,但是两次得到结果一致,可见对文件进行hash运算,可以用作文件内容校验,如果文件内容发生修改,文件的hash值就发生了变化。

4.hash_hmac算法

hash_hmac方法可以生成带有密钥的hash

<?php
$data = 'Jhq';
echo hash_hmac('md5', $data, 'I am key').PHP_EOL;
echo hash_hmac('sha1', $data, 'I am key').PHP_EOL;
echo hash_hmac_file('md5', __DIR__.'/hash.txt', 'I am key').PHP_EOL;
echo hash_hmac_file('sha1', __DIR__.'/hash.txt', 'I am key').PHP_EOL;

以上例程输出

59cb282953d3bd3f5ac4f4e5092f98e2
4357d4bba84d5e7574309071c27a8504c9c45060
59cb282953d3bd3f5ac4f4e5092f98e2
4357d4bba84d5e7574309071c27a8504c9c45060

同样的,hash_hmac也可以对字符串和文件进行hash运算,并且运算结果一致。

学习更多内容: https://404.360tryst.com

我的视频课程: https://edu.csdn.net/course/detail/9933

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苍穹0113

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值