我想为想要使用我的任何API服务的新客户生成API密钥。 因为我使用的是开放API服务,我不想使用身份验证,只能通过API密钥识别客户端使用情况
我尝试使用此代码
public static string GetAPIKey()
{
string sig = string.Empty;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
var ex = rsa.ExportParameters(true);
sig = Convert.ToBase64String(ex.DQ);
sig = sig
.Replace("+", "")
.Replace("/", "")
.TrimEnd('=');
}
return sig.Substring(0, 64);
}
在我的测试中,我确实得到一个随机的64长度字符串,但是使用方法时感觉不对劲。因为RSACryptoServiceProvider
用法而引起的,特别是当我尝试生成DQ
属性时
您是否知道生成随机64字符串的更好实现?
答案 0 :(得分:0)
如果您不想使用GUID,可以在C#中使用标准的Random类。
private static readonly Random Random = new Random();
public static string GetApiKey()
{
var bytes = new byte[48];
Random.NextBytes(bytes);
var result = Convert.ToBase64String(bytes);
return result;
}
由于48字节将映射到Base64中的64个字符,因此这将为您提供64个随机字符。但它并不保证唯一性。
答案 1 :(得分:-1)
为什么不使用GUID?
使用它两次生成64个字符的字符串,这是完全随机且唯一的。