一天的美好时光,
最近,我一直在玩Laravel Echo,并得出结论,对于任何有敏感信息的操作,我需要一个令牌,它足够安全,可以用作广播频道。
所以我的想法就是产生真正的"随机,但基于一些数据令牌如下:
所以我最终得到的是255个字符的字符串。这个令牌在每次登录时都会重新生成,所以它非常强大,并且#34;
那么,是否有可能以更少的麻烦来实现相同的目标,或者这是实现大多数安全性的最佳方法"对于任何敏感数据?
/**
* Generate truly random string for broadcast_token
* @param App\Models\User $user
* @return string
*/
function broadcast_id(\App\Models\User $user) : string {
$algorithm = 'sha512';
$randomString = \Illuminate\Support\Str::random(127);
$usernameHash = hash($algorithm, $user->username);
$emailHash = hash($algorithm, $user->email);
$firstNameHash = hash($algorithm, $user->first_name);
$lastNameHash = hash($algorithm, $user->last_name);
$timeHash = hash($algorithm, time());
$hashedData = hash($algorithm, sprintf('%s:%s:%s:%s:%s', $usernameHash, $emailHash, $firstNameHash, $lastNameHash, $timeHash));
return sprintf('%s%s', $randomString, $hashedData);
}
答案 0 :(得分:0)
对于任何具有敏感信息的操作,我需要一个令牌,该令牌将足够安全以用作广播频道。
好的。
- 创建127个字符的随机字符串
[snip]
所以我最终得到的是255个字符的字符串。每次登录都会重新生成此令牌,因此它是否“强大”?
您的目标是一个随机字符串,所以您从一个随机字符串开始?
这似乎很麻烦。
那么,是否有可能以更少的“麻烦”实现相同的目标,或者这几乎是对任何敏感数据实现“最高安全性”的最佳方法?
简单:
$token = bin2hex(random_bytes(32));
将一堆东西混在一起只会增加脚本的少量计算开销,实际上并不能确保任何安全。
使用32字节的随机字符串,在生成大约2 ^ 128个令牌之后,您将首次遇到冲突(概率为50%)。您一生中都不会达到这个数字。