php - Laravel 中的 str::random() 函数对于短 URL 是否可靠?
问题描述
我正在尝试在我的 Laravel 项目中创建一个简单的 url 缩短器。我只想使用小写和大写字母和数字作为短 url 地址。(例如:sD7hY6g) Laravel 中“Illuminate\Support\Str”类下的“Str::random()”函数是否有可能返回这些字符以外的任何内容?我可以信任此函数还是需要创建自己的自定义函数?
(另外,无论我使用哪个函数,我都会在记录之前检查代码是否已经在数据库中。)
感谢所有提前回答的人。
解决方案
你应该相信Str::random()
总是返回一个字母数字字符串吗?是的。
该函数通过编码为base 64
数字来规范化其输出。表示基数 64 数字的 64 个符号是ABCDEFGHIJKLMNOPQRSTUVWXYVabcdefghijklmnopqrstuvwxyz0123456789+\
和=
用于填充。
该函数还替换\+=
为空(空格),这意味着唯一可能的输出Str::random()
是ABCDEFGHIJKLMNOPQRSTUVWXYVabcdefghijklmnopqrstuvwxyz0123456789
。
Laravel 5+Illuminate\Support\Str@random
public static function random($length = 16)
{
$string = '';
while (($len = strlen($string)) < $length) {
$size = $length - $len;
$bytes = random_bytes($size);
$string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
}
return $string;
}
推荐阅读
- python - 如何使用与 Excel 文件中的连接数据相关的值创建列
- c# - 生成 xml 文档时如何插入元素计数
- python - 如何用 numpy 计算表格的第 95 个百分位数?
- excel - VBA 宏可在不同工作表中创建不同范围的单个 pdf
- sql - 使用 VBA for Excel:从 ODBC SQL 中提取数据,如何使用“今天前一年”的值?
- c# - 在 VS2017/2019 中构建 StackOverflowException
- javascript - 将 Vue.JS 项目转换为 Nuxt.JS 项目
- mysql - 永久阻止 mariadb
- .net - 允许从 v4.8 降级到 v4.5.1
- javascript - 元素在 Chrome 77 上短暂消失并重新出现