MHash 函数 mhash_count() 返回最高评估的常量值,表示当前 MHash 安装中可用的哈希算法。例如,0 表示 CRC32,1 表示 MD5,2 表示 SHA1,等等。您可以通过对任何预定义的 MHash 常量执行 print 语句来获得这些算法的评估值,例如这里提供的常量:https://php.net/manual/en/mhash.constants.php 。
mhash_count() 在 MHash 中的目的类似于 hash_algos() 在 HASH 消息摘要框架中的目的。它不是提供可用哈希算法的数组,而是简单地提供算法常量的最高评估常量表达式。如示例代码所示,思路是使用“$i <= mhash_count()”条件在 for 循环中解析 mhash 算法列表。
但是,存在一个问题:评估的常量表达式的列表中跳过了几个整数。虽然 2 表示 SHA1,3 表示 HAVAL256 等等,但没有 4 和 6。当 for 循环处于该行时,它们会生成空白结果,并且您正在调用 mhash_get_block_size() 和 mhash_get_hash_name() 等函数。这些可能保留用于由于效率低下或缺乏安全性而被移除的算法,并且数字到预定义常量的设置未更改为使其向后兼容旧代码。
如果您想了解哪些算作有效常量,哪些不算,请尝试运行以下代码
<?php
// 作者:[email protected]
// 解析所有哈希算法
// ---------------------------------------------------
for($i = 0; $i <= mhash_count(); $i++)
{
// 获取算法信息
// ---------------------------------------------------
$mhash_algorithm_block_size = mhash_get_block_size($i);
$mhash_algorithm_name = mhash_get_hash_name($i);
// 决定是否打印算法信息
// ---------------------------------------------------
if(strlen($mhash_algorithm_name) < 1)
{
// 存在可用算法数据
// ---------------------------------------------------
print("# $i --- NO ALGORITHM NAME / NO ALGORITHM BLOCKSIZE .<br><br>");
}
else
{
// 不存在可用算法数据
// ---------------------------------------------------
print("# $i --- $mhash_algorithm_name to $mhash_algorithm_block_size .<br><br>");
}
}
?>
示例结果
............................
# 0 --- CRC32 to 4 .
# 1 --- MD5 to 16 .
# 2 --- SHA1 to 20 .
# 3 --- HAVAL256 to 32 .
# 4 --- NO ALGORITHM NAME / NO ALGORITHM BLOCKSIZE .
# 5 --- RIPEMD160 to 20 .
# 6 --- NO ALGORITHM NAME / NO ALGORITHM BLOCKSIZE .
# 7 --- TIGER to 24 .
# 8 --- GOST to 32 .
...(等等)...