此代码生成的 ID 的安全性如何?

How secure is the ID resulting from this code?

我正在生成一个用于我的应用程序的 ID,用户可以在其中相互连接。为了识别,我使用了一个 ID,有点像 teamviewer。我希望它既是唯一的又是加密的 secure/hard 来猜测。所以我生成了一个 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;
}

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

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

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

从实用的角度来看,我也喜欢这个方案。这是一个生成无法猜测的 ID 的好系统。