php hash算法详解

一、什么是hash

散列(hash,也称“哈希”)是一种重要的存储方式,也是一种常见的检索方法。

散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

Hash 算法能将将任意长度的二进制明文映射为较短的二进制串的算法,并且不同的明文很难映射为相同的 Hash 值。

也可以理解为空间映射函数,是从一个非常大的取值空间映射到一个非常小的取值空间,由于不是一对一的映射,Hash 函数转换后不可逆,意思是不可能通过逆操作和 Hash 值还原出原始的值。

二、Hash 算法有什么特点

Hash 值又称为指纹或者摘要,具有以下特点:

正向快速:给定明文和 Hash 算法,在有限时间和有限资源内能计算得到 Hash 值。
逆向困难:给定 Hash 值,在有限时间内很难逆推出明文。
输入敏感:原始输入信息发生任何变化,新的 Hash 值都应该出现很大变化。
冲突避免:很难找到两段内容不同的明文,使得它们的 Hash 值一致。

三、Hash 算法有哪些

常见 Hash 算法有 MD5SHA 系列,目前 MD5SHA1 已经被破解,一般推荐至少使用 SHA2-256 算法。

下面我们来看具体写一个 Hash 函数需要注意些什么,首先要明白 Hash 函数是把一个大范围映射到一个小范围,目的往往是为了节省空间,使得数据容易保存,另外 Hash 函数也会应用于查找上。

php实现md5、sha1、sha256方法:

<?php

// md5 计算字符串的 MD5 散列
$str = md5('123456');
var_dump($str);
// string(32) "e10adc3949ba59abbe56e057f20f883e"

// sha1 计算字符串的 SHA-1 散列
$str = sha1('123456');
var_dump($str);
// string(40) "7c4a8d09ca3762af61e59520943dc26494f8941b"

// sha256 计算字符串的 SHA-256 散列
$str = hash('sha256', '123456', false);
var_dump($str);
// string(64) "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"

四、php支持的hash算法

1.可以用php的hash_algos()函数打印出受支持的所有哈希算法名称

语法:array hash_algos ( void )

简介:返回一个数值索引的数组, 包含了受支持的哈希算法名称。

2.php的hash()函数

语法:string hash ( string $algo , string $data [, bool $raw_output = false ] )

简介:
algo:要使用的哈希算法,例如:”md5”,”sha256”,”haval160,4” 等。
data:要进行哈希运算的消息。
raw_output:设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串。

测试代码:

<?php

$str = "123456";

foreach (hash_algos() as $v) {
    $r = hash($v, $str, false);
    printf("%-12s %3d %s\n", $v, strlen($r), $r);
}

输出:

md2           32 d4541250b586296fcce5dea4463ae17f
md4           32 585028aa0f794af812ee3be8804eb14a
md5           32 e10adc3949ba59abbe56e057f20f883e
sha1          40 7c4a8d09ca3762af61e59520943dc26494f8941b
sha224        56 f8cdb04495ded47615258f9dc6a3f4707fd2405434fefc3cbf4ef4e6
sha256        64 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
sha384        96 0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454
sha512/224    56 007ca663c61310fbee4c1680a5bbe70071825079b23f092713383296
sha512/256    64 184b5379d5b5a7ab42d3de1d0ca1fedc1f0ffb14a7673ebd026a6369745deb72
sha512       128 ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413
sha3-224      56 6be790258b73da9441099c4cb6aeec1f0c883152dd74e7581b70a648
sha3-256      64 d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e
sha3-384      96 1fb0da774034ba308fbe02f3e90dc004191df7aec3758b6be8451d09f1ff7ec18765f96e71faff637925c6be1d65f1cd
sha3-512     128 64d09d9930c8ecf79e513167a588cb75439b762ce8f9b22ea59765f32aa74ca19d2f1e97dc922a3d4954594a05062917fb24d1f8e72f2ed02a58ed7534f94d27
ripemd128     32 d6d56cab46e0f3af2c756289f2b447e0
ripemd160     40 d8913df37b24c97f28f840114d05bd110dbb2e44
ripemd256     64 77093b1266befed58d512e67b3a8a15398c3ce5c1333d66a190becc9baa329e9
ripemd320     80 a2ee4b6b9e3144c7db61b1ffc748bf2c728b65819e3f69a021f515acb044995b90f03d60974b6b4a
whirlpool    128 fd9d94340dbd72c11b37ebb0d2a19b4d05e00fd78e4e2ce8923b9ea3a54e900df181cfb112a8a73228d1f3551680e2ad9701a4fcfb248fa7fa77b95180628bb2
tiger128,3    32 5b2715f7cb7488ce2deb8544f0aa91b6
tiger160,3    40 5b2715f7cb7488ce2deb8544f0aa91b6f0eec76f
tiger192,3    48 5b2715f7cb7488ce2deb8544f0aa91b6f0eec76fb3b74265
tiger128,4    32 effe440b596c7d1766d435a2fd16641e
tiger160,4    40 effe440b596c7d1766d435a2fd16641e27d32af5
tiger192,4    48 effe440b596c7d1766d435a2fd16641e27d32af54ec875c2
snefru        64 3321dcaf8911d3842e14a7a415be2fb1a337f4306a4fb8290fd7fe33be269df7
snefru256     64 3321dcaf8911d3842e14a7a415be2fb1a337f4306a4fb8290fd7fe33be269df7
gost          64 84cdecc9c273927ff6d9cca1ae75945990a2cb1f81e5daab52a987f6d788c372
gost-crypto   64 7db20e3a7d652bde0b1a1b7486076a2e11f795e99bf7f5fe700fb83f15b19ef2
adler32        8 042e0136
crc32          8 70930f27
crc32b         8 0972d361
fnv132         8 eb008bb8
fnv1a32        8 9995b6aa
fnv164        16 10f897e26c4b9478
fnv1a64       16 f6e3ed7e0e67290a
joaat          8 eef833c1
haval128,3    32 1d8071d4a59f25a2a92a9a4844ba1e05
haval160,3    40 83e612afb8ed267198b696759a49561375f70c81
haval192,3    48 d2cfda5179fd9b6037ba35f261c576b2300717151a8db6a5
haval224,3    56 d59e77b4c4d7aa6e02708683381c5631ee79b9e50ab9eaeb4dc38b9a
haval256,3    64 0e3b78d8380844b0f697bb912da7f4d210382c6714194fd16039ef2acd924dcf
haval128,4    32 2019090003211f11c03adb877bf3ae20
haval160,4    40 3da690924ffb8d3f5bff8b608279f3c419bdb9c9
haval192,4    48 7e1e573209c8d7f39919bea0d1466df325f3dbdd1fd3057a
haval224,4    56 64d007c6e75ee71244bf33a876c8f380c17e64b18d3d9be67000b277
haval256,4    64 84095060071ad0f4f41fa629653511074720aaa94c4f0d873e317d58002f8020
haval128,5    32 60271b45e6d4b8eea7d9f474e69c848b
haval160,5    40 ee85271e7bb4b7f2ec4c5418b47804eb1be9e91f
haval192,5    48 9e8acd170a8fe1b929c0c652397b6b494abf1cd095371ad7
haval224,5    56 dbcdd0348d0b23a89fe3e190abd8b279a5d8d4fa4e62d1e02ad0a6ff
haval256,5    64 2f014311e0926fa8b3d6e6de2051bf69332123baadfe522b62f4645655859e7a

done!

出处:www.l1mn.com

原文标题:php hash算法详解

原文地址:https://www.l1mn.com/p/3jmhq1.html

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

评论

皖ICP备2023023451号

Copyright © L1MN.COM 联系方式:l1mnfw@163.com