PHP 8.5: 所有的 MHASH_* 常量弃用
PHP 核心中捆绑的 Hash 扩展包括一个向后兼容层,用于哈希扩展过时的 PHP 函数的 mhash
类。只有当 PHP 使用 --with-mhash
配置编译时,才会添加这些函数。
在 PHP 8.1 中,所有 mhash
函数都被弃用。包括 mhash
、mhash_count
、mhash_get_block_size
、mhash-get_hash_name
和mhash_keygen_s2k
函数。
然而,在 PHP 8.1 中,这些函数接受为参数的 PHP 常量并没有被弃用。在 PHP 8.5 中,所有 MHASH_*
常量以及现有的 mhash
函数都被弃用。
以下代码段在 PHP 8.1 及更高版本上发出了一条关于 mhash
函数弃用的弃用消息:
mhash(MHASH_SHA1, 'test');
Function mhash() is deprecated since 8.1 ...
在 PHP 8.5 及之后的版本,因为 MHASH_*
常量也被弃用了,同时也会发送以下弃用通知:
+ Constant MHASH_SHA1 is deprecated ....
Function mhash() is deprecated since 8.1 ...
以下所有的 MHASH_*
PHP 常量都在 PHP 8.4 中弃用了。使用 hash
函数时,轻参考 "hash()
时的字符串(string
)值" 作为替代。
mhash 常量 | 常量值 | hash() 的 string 值 |
---|---|---|
MHASH_CRC32 | 0 | crc32 |
MHASH_MD5 | 1 | md5 |
MHASH_SHA1 | 2 | sha1 |
MHASH_HAVAL256 | 3 | haval256,3 |
MHASH_RIPEMD160 | 5 | ripemd160 |
MHASH_TIGER | 7 | tiger192,3 |
MHASH_GOST | 8 | gost |
MHASH_CRC32B | 9 | crc32b |
MHASH_HAVAL224 | 10 | haval224,3 |
MHASH_HAVAL192 | 11 | haval192,3 |
MHASH_HAVAL160 | 12 | haval160,3 |
MHASH_HAVAL128 | 13 | haval128,3 |
MHASH_TIGER128 | 14 | tiger128,3 |
MHASH_TIGER160 | 15 | tiger160,3 |
MHASH_MD4 | 16 | md4 |
MHASH_SHA256 | 17 | sha256 |
MHASH_ADLER32 | 18 | adler32 |
MHASH_SHA224 | 19 | sha224 |
MHASH_SHA512 | 20 | sha512 |
MHASH_SHA384 | 21 | sha384 |
MHASH_WHIRLPOOL | 22 | whirlpool |
MHASH_RIPEMD128 | 23 | ripemd128 |
MHASH_RIPEMD256 | 24 | ripemd256 |
MHASH_RIPEMD320 | 25 | ripemd320 |
MHASH_SNEFRU256 | 27 | snefru256 |
MHASH_MD2 | 28 | md2 |
MHASH_FNV132 | 29 | fnv132 |
MHASH_FNV1A32 | 30 | fnv1a32 |
MHASH_FNV164 | 31 | fnv164 |
MHASH_FNV1A64 | 32 | fnv1a64 |
MHASH_JOAAT | 33 | joaat |
MHASH_CRC32C | 34 | crc32c |
MHASH_MURMUR3A | 35 | tiger160,3 |
MHASH_MURMUR3C | 36 | tiger160,3 |
MHASH_MURMUR3F | 37 | tiger160,3 |
MHASH_XXH32 | 38 | tiger160,3 |
MHASH_XXH64 | 39 | tiger160,3 |
MHASH_XXH3 | 40 | tiger160,3 |
MHASH_XXH128 | 41 | tiger160,3 |
推荐的替代
与 mhash
函数弃用一样,为防止弃用通知,建议的替换是完全禁止使用 mhash
函数和常量,而是使用 hash
函数族。
计算 hash 值
- $hash = mhash(MHASH_SHA1, 'test');
+ $hash = hash('sha1', 'test', true);
hash
函数接受算法名称的字符串值(示例中为 sha1
),而不是 mhash
中的常量。此外,默认情况下,hash
函数将计算出的哈希值作为十六进制值返回,除非 hash
函数的第三个参数设置为 true
。
计算 HMAC 值
计算 HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)可以使用与 mhash*()
家族相同的 mhash
函数来完成,不过也有有一个单独的 hash_hmac
函数可以直接实现。
- $hmac = mhash(MHASH_SHA1, 'test', 'secret-key');
+ $hmac = hash_hmac('sha1', 'test', 'secret-key', true);
向后兼容性影响
使用带有MHASH_*
常量的 mhash
函数的 PHP 应用现在会收到针对每个 MHASH_*
常量使用的额外弃用通知。
遵循建议的替换方法,使用 hash
函数进行跨版本兼容修复。