为API生成64个Chars密钥

时间:2014-03-04 12:18:37

标签: c# api

我想为想要使用我的任何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字符串的更好实现?

2 个答案:

答案 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个字符的字符串,这是完全随机且唯一的。