【发布时间】:2020-08-29 20:59:43
【问题描述】:
我读了this 问题,现在有点老了。基于此,这是今天创建随机令牌的可行方法吗?我还找到了this,似乎使用了相同的方法。
private byte[] GetRandomBytes(int size)
{
using (var randomNumberGenerator = RandomNumberGenerator.Create())
{
var randomBytes = new byte[size];
randomNumberGenerator.GetBytes(randomBytes);
return randomBytes;
}
}
...
var randomBytes = GetRandomBytes(size);
var token = Convert.ToBase64String(randomBytes);
我打算将令牌用作 URL 中的一次性令牌,用于双重选择和登录等多种用途。令牌的生命周期取决于使用情况,但例如登录很短,例如5分钟。不涉及任何密码,只有邮寄到用户电子邮件的“魔术链接”。
受保护的解决方案不需要最前沿的保护,但我希望它相对难以猜测令牌并进入。如果难以猜测令牌,并且由于我在 n 数量后过期令牌时间,这是一种可行的方法吗?如果某人已经有预定义的 Base64 编码数字列表,那么猜测令牌会有多困难?
【问题讨论】:
-
RandomNumberGenerator.Create()返回一个加密强度 RNG,因此除非您将其设置得太小,否则无法猜测令牌。
标签: c# random cryptography token