我有这方面的工作我想就最安全的创建令牌(对于API)提出一些建议,并且他们中的任何一个都会遇到任何问题吗?
选项A:
$token = bin2hex(openssl_random_pseudo_bytes(16));
或选项B:
// $username - unique username for this user
$token = hash('sha512', sha1($username.time().rand(1000, 9999)));
答案 0 :(得分:3)
虽然这个问题偏离主题,但很有意思。
我的回答:选项A.
选项B包含至少一个可预测值$ username。 time()
值可能是可预测的,如果可以猜到种子,则rand()
是可预测的。
看看这个:https://crackstation.net/hashing-security.htm
编辑添加:当然,如果令牌不必保密,它就没有任何区别。您可以使用用户名。