我想为想要使用我的任何 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 字符串的更好实现吗?
如果不想使用 GUID,则可以使用 C# 中的标准随机类。
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 个随机字符。但是,它不保证唯一性。
为什么不直接使用 GUID?
使用它两次来生成一个 64 个字符的字符串,这是完全随机和唯一的。