这是一个加密强大的 Guid 吗?

Chr*_*son 6 c# random guid

我正在考虑使用 Guid 作为网站的随机匿名访问者标识符(存储为 cookie 客户端大小和数据库服务器端),我想要一种生成 Guids 的加密方式(以便尽量减少碰撞的机会)。

为了记录,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);
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

编辑: 这将用于两个目的,访问者的唯一 ID 和购买的交易 ID(这将简要地作为查看/更新敏感信息所需的令牌)。

Jam*_*ate 8

在回答 OP 的实际问题时,这是否具有强大的加密功能,答案是肯定的,因为它是直接从RNGCryptoServiceProvider创建的。然而,目前接受的答案提供了一个解决方案,根据这个 SO 答案,该解决方案绝对不是加密安全的:

Microsoft 的 GUID 生成器加密安全吗

由于理论上缺乏唯一性(通过数据库查找很容易检查),这在架构上是否是正确的方法是另一个问题。


TGH*_*TGH -3

我一般只使用Guid.NewGuid();

http://msdn.microsoft.com/en-us/library/system.guid.newguid(v=vs.110).aspx

  • NewGuid() 不是[有点可预测](http://stackoverflow.com/questions/2621563/how-random-is-system-guid-newguid-take-two) 吗? (2认同)