【发布时间】:2025-12-08 09:20:03
【问题描述】:
我正在考虑使用 Guid 作为网站的随机匿名访问者标识符(存储为 cookie 客户端大小和数据库服务器端),并且我想要一种生成 Guid 的加密方式强(以尽量减少碰撞的机会)。
作为记录,Guid 中有 16 个字节(或 128 位)。
这就是我的想法:
/// <summary>
/// Generate a cryptographically strong Guid
/// </summary>
/// <returns>a random Guid</returns>
private Guid GenerateNewGuid()
{
byte[] guidBytes = new byte[16]; // Guids are 16 bytes long
RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();
random.GetBytes(guidBytes);
return new Guid(guidBytes);
}
有没有更好的方法来做到这一点?
编辑: 这将用于两个目的,访问者的唯一 ID 和购买的交易 ID(这将简要地成为查看/更新敏感信息所需的令牌)。
【问题讨论】:
-
如果您想尽量减少使用普通 guid 发生冲突的机会,它已经具备您需要的所有保护措施。现在具有不可预测的随机 id,这是具有不同解决方案的不同要求。那么您的真正要求是什么,没有冲突或不可预测性(在同一键空间上发生冲突的可能性更高)?