此代码生成的 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 的好系统。
我正在生成一个用于我的应用程序的 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 的好系统。