这段代码产生的ID有多安全?

时间:2018-03-11 14:31:53

标签: c# cryptography base64 guid

我正在生成一个ID,以便在我的应用程序中使用,用户可以相互连接。鉴定我使用的是ID,有点像团队访问者。我希望它既独特又密码安全/难以猜测。所以我已经生成了一个GUID,以及8个字节的安全数据,并简单地将它们连接起来。我的问题是这个ID专门针对暴力攻击的安全性如何? ID示例:dKNqrkHImQ9A9ulu8DOvYDLS3x2U8k0d

我的代码:

public static string MakeBase64ID()
{
    int postkeylength = 8; //bytes
    byte[] prekey = CreateCryptographicallySecureGuid().ToByteArray();
    byte[] postkey = CryptoRandomByteArr(postkeylength);

    byte[] ID = new byte[prekey.Length + postkeylength];
    Array.Copy(prekey, ID, prekey.Length);
    Array.Copy(postkey, 0, ID, prekey.Length, postkey.Length);

    return Convert.ToBase64String(ID);
}

public static Guid CreateCryptographicallySecureGuid()
{
    return new Guid(CryptoRandomByteArr(16));
}

public static byte[] CryptoRandomByteArr(int length)
{
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] buffer = new byte[length];
    rng.GetBytes(buffer);
    return buffer;
}

1 个答案:

答案 0 :(得分:2)

它包含64位加密随机性。这取决于暴力迫使速度有多安全。如果以每秒100万次尝试完成,则需要2^64/1e6/86400/365=584942年。这非常安全。

如果暴力强制必须通过互联网,那么速度可能会下降到每秒100次尝试。

64位比大多数密码更安全。

我也从实际的角度来看这个方案。这是一个很好的系统来生成无法猜到的ID。