이번에 배울 내용은 또 다른 해시 암호화 확장 프로그램입니다. 그러나 이 확장 Mhash는 Hash 확장에 통합되었습니다. 동시에 이 확장은 더 이상 권장되지 않습니다. 해시 암호화 작업을 수행하려면 해시 확장의 기능을 직접 사용해야 합니다. 그러므로 우리는 오늘도 배움의 목적으로 이해합니다. 해시 확장의 내용에 대해서는 이전 기사인 PHP 해시 정보 요약 확장 프레임워크를 확인할 수 있습니다.
암호화 해시 함수 사용
$hash = mhash(MHASH_MD5, "测试Mhash"); echo $hash, PHP_EOL; echo bin2hex($hash), PHP_EOL; // /�8�><�۠�P4q�j� // 2fcb38e93e3cc8dba09f503471846a9d $hash = hash('md5', "测试Mhash"); echo $hash, PHP_EOL; // 2fcb38e93e3cc8dba09f503471846a9d $hash = mhash(MHASH_MD5, "测试Mhash", 'hmac secret'); echo $hash, PHP_EOL; echo bin2hex($hash), PHP_EOL; // �k�<F�m �OM���� // b86bb83c46b76d09be4f4daf18ebfe85
코드에서 볼 수 있듯이 mhash() 함수와 hash()의 사용은 매우 유사합니다. 물론 기능도 동일합니다. 그러나 mhash() 함수로 암호화한 내용은 바로 바이너리이다. bin2hex()를 통해 이 내용을 16진수로 변환하면 일반 hash() 함수로 암호화한 구조가 완전히 동일함을 알 수 있다.
hmac 암호화를 수행할 때 세 번째 매개변수에 키를 직접 추가하면 됩니다.
지원되는 모든 알고리즘 유형을 탐색하세요
물론 해시 암호화와 마찬가지로 Mhash 암호화도 다른 알고리즘을 선택할 수 있습니다. 또한 관련 기능을 직접 사용하여 현재 환경에서 지원되는 암호화 알고리즘을 확인할 수도 있습니다.
echo mhash_count(), PHP_EOL; $nr = mhash_count(); // 33 for ($i = 0; $i <= $nr; $i++) { echo sprintf("Hash:%s,块大小为: %d\n", mhash_get_hash_name($i), mhash_get_block_size($i)); } // Hash:CRC32,块大小为: 4 // Hash:MD5,块大小为: 16 // Hash:SHA1,块大小为: 20 // Hash:HAVAL256,块大小为: 32 // Hash:,块大小为: 0 // Hash:RIPEMD160,块大小为: 20 // Hash:,块大小为: 0 // Hash:TIGER,块大小为: 24 // Hash:GOST,块大小为: 32 // Hash:CRC32B,块大小为: 4 // Hash:HAVAL224,块大小为: 28 // Hash:HAVAL192,块大小为: 24 // Hash:HAVAL160,块大小为: 20 // Hash:HAVAL128,块大小为: 16 // Hash:TIGER128,块大小为: 16 // Hash:TIGER160,块大小为: 20 // Hash:MD4,块大小为: 16 // Hash:SHA256,块大小为: 32 // Hash:ADLER32,块大小为: 4 // Hash:SHA224,块大小为: 28 // Hash:SHA512,块大小为: 64 // Hash:SHA384,块大小为: 48 // Hash:WHIRLPOOL,块大小为: 64 // Hash:RIPEMD128,块大小为: 16 // Hash:RIPEMD256,块大小为: 32 // Hash:RIPEMD320,块大小为: 40 // Hash:,块大小为: 0 // Hash:SNEFRU256,块大小为: 32 // Hash:MD2,块大小为: 16 // Hash:FNV132,块大小为: 4 // Hash:FNV1A32,块大小为: 4 // Hash:FNV164,块大小为: 8 // Hash:FNV1A64,块大小为: 8 // Hash:JOAAT,块大小为: 4
PHP는 이전 코드에서 사용한 MHASH_MD5와 같이 이러한 알고리즘을 나타내는 많은 상수도 제공합니다. 실제로 우리가 탐색하는 콘텐츠 앞에 MHASH_를 추가하면 됩니다. 지원되는 상수의 구체적인 목록은 공식 매뉴얼에서 확인할 수 있으므로 여기에는 복사하여 붙여넣지 않겠습니다.
Salted S2K 알고리즘은 비밀번호 다이제스트를 생성합니다
또한 Mhash는 매우 편리한 비밀번호로 암호화된 콘텐츠 세트를 쉽게 생성하는 데 사용할 수 있는 매우 편리한 Salted S2K 알고리즘도 제공합니다.
// OpenPGP 指定的 Salted S2K 算法 $hashPassword = mhash_keygen_s2k(MHASH_SHA1, '我的密码', random_bytes(2), 4); echo $hashPassword, PHP_EOL; echo bin2hex($hashPassword), PHP_EOL; // �-!= // 101ab899
물론 이 알고리즘도 상대적으로 안전합니다. 솔트 매개변수가 있고 반환되는 데이터의 길이를 지정할 수 있습니다. 또한 이진 데이터를 반환합니다. 표준 텍스트 콘텐츠를 저장해야 하는 경우 이를 16진수 형식으로 변환해야 합니다. 하지만 상대적으로 말하자면 바이너리 콘텐츠를 직접 생성하는 것이 더 안전하다고 생각합니다.
요약
다양한 기능에는 다양한 적용 시나리오가 있지만 실제로 Mhash에는 특별한 적용 시나리오가 없습니다. 결국 Hash 확장의 관련 기능은 그 역할을 완전히 대체할 수 있으며 더 풍부하고 사용하기 쉽습니다. . 오래된 프로젝트에서 이러한 기능의 사용을 본다면 재구성을 통해 천천히 새로운 기능으로 교체할 수 있습니다.
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84Mhash%E6%89%A9%E5%B1%95%E5%87%BD%E6%95%B0%E7%9A%84%E5%AD%A6%E4%B9%A0.php
추천 학습: php 비디오 튜토리얼