<?php declare(strict_types=1); // random_bytes()的基础使用示例 try { $rand = random_bytes(32); } catch (Exception $e) { exit('Exception: ' . $e->getMessage()); } var_dump($rand); // string(32) "t������]��hcC�]af�E�9;U�Wq��V" var_dump(bin2hex($rand)); // string(64) "749711b8beb6aa0f885da0b1686343f25d61661ea245c3393b559a5771e0fe56" var_dump(md5($rand)); // string(32) "8506b6c0a087a83d30e5c55cf7837f84" var_dump(base64_encode($rand)); // string(44) "dJcRuL62qg+IXaCxaGND8l1hZh6iRcM5O1WaV3Hg/lY=" // 说明:bin2hex()的功能是二进制转为十六进制,长度为32的二进制将转成长度为64的十六进制。 /** * 生成随机MD5字符串 * * @return string 随机MD5字符串 */ function random_md5(): string { try { $rand = random_bytes(1024); // 使用random_bytes()产生随机元素,长度为1024 } catch (Exception) { $rand = microtime() . mt_rand(); // random_bytes()抛出异常,改为使用microtime()和mt_rand()产生随机元素 } return md5($rand); } var_dump(random_md5()); // string(32) "4809c98755423ddd420d8eca0fa9c7a8" //========== 总结 ==========// // 1、random_bytes()比mt_rand()、openssl_random_pseudo_bytes()等函数有更好的随机性以及更高的安全性。 // 2、random_bytes()生成的是一堆乱码,因此大多数时候都需要配合bin2hex()、md5()、base64_encode()等函数使用, // 2、生成随机Token或生成随机文件名这类功能是random_bytes()的主要使用场景。
Copyright © 2024 码农人生. All Rights Reserved