我正在考虑使用 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);
}
有一个更好的方法吗?
编辑: 这将用于两个目的,访问者的唯一 ID 和购买的交易 ID(这将简要地作为查看/更新敏感信息所需的令牌)。
在回答 OP 的实际问题时,这是否具有强大的加密功能,答案是肯定的,因为它是直接从RNGCryptoServiceProvider创建的。然而,目前接受的答案提供了一个解决方案,根据这个 SO 答案,该解决方案绝对不是加密安全的:
由于理论上缺乏唯一性(通过数据库查找很容易检查),这在架构上是否是正确的方法是另一个问题。
TGH*_*TGH -3
我一般只使用Guid.NewGuid();
http://msdn.microsoft.com/en-us/library/system.guid.newguid(v=vs.110).aspx
| 归档时间: | 
 | 
| 查看次数: | 1969 次 | 
| 最近记录: |