为 API 生成 64 个字符的密钥



我想为想要使用我的任何 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 个字符的字符串,这是完全随机和唯一的。

最新更新