如何在RSA上设置KeySize?

时间:2016-09-20 02:59:45

标签: c# .net encryption rsa

如何在bool_literal班级设置密钥大小?

identifier没有密钥尺寸选项,RSA创建RSA.Create()后没有任何效果。

2 个答案:

答案 0 :(得分:2)

如果您使用的是.NET Framework:

没有提供商不知道的解决方案。您必须使用RSACryptoServiceProvider(int)构造函数或有意创建RSACng对象。

如果您使用的是.NET Core:

RSA rsa = RSA.Create();
rsa.KeySize = someValue

是正确的方法,它适用于RSA.Create()的所有可能答案。

如果您使用的是Mono:

我不知道它匹配哪种行为。

如果你来自未来:

https://github.com/dotnet/corefx/issues/8688正在跟踪将来添加RSA.Create(int)(和RSA.Create(RSAParameters))以帮助解决此问题。

需要交叉编译的范围方法:

(正确地为你的构建和衬里定义NETFX,这是一个留给读者的练习)

internal static RSA RsaCreate(int keySize)
{
#if NETFX
    // If your baseline is .NET 4.6.2 or higher prefer RSACng
    // or 4.6+ if you are never giving the object back to the framework
    // (4.6.2 improved the framework's handling of those objects)
    // On older versions RSACryptoServiceProvider is the only way to go.
    return new RSACng(keySize);
#else
    RSA rsa = RSA.Create();
    rsa.KeySize = keySize;

    if (rsa.KeySize != keySize)
        throw new Exception("Setting rsa.KeySize had no effect");

    return rsa;
#endif
}

当然,如果您来自未来,您可以直接以更高的优先级#if。

调用新的Create重载。

答案 1 :(得分:1)

RSA只是RSA实现的抽象类。您应该使用RSACryptoServiceProvider

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(bitSize);

请注意,在您尝试使用密钥之前,密钥不会生成,因此请不要将构造函数单独放在后台工作程序等中。