使用random_bytes()生成随机字符串

<?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]afE9;UWq��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