C# &引用;参数不正确";使用RSACng 512+加密阵列时出现异常;OaepSHA256

C# &引用;参数不正确";使用RSACng 512+加密阵列时出现异常;OaepSHA256,c#,cryptographicexception,C#,Cryptographicexception,将RSACng(512)与OaepSHA256(C#,.NET Framework 4.6.1)一起使用时遇到问题-获取System.Security.Cryptography.CryptographyException:'参数不正确。'编码(任何)字节数组时: using System.Security.Cryptography; ... using (RSACng rsaCng = new RSACng(512)) { var result = rsaCng.Encrypt(new

将RSACng(512)与OaepSHA256(C#,.NET Framework 4.6.1)一起使用时遇到问题-获取System.Security.Cryptography.CryptographyException:'参数不正确。'编码(任何)字节数组时:

using System.Security.Cryptography;
...

using (RSACng rsaCng = new RSACng(512))
{
    var result = rsaCng.Encrypt(new byte[1], RSAEncryptionPadding.OaepSHA256); // throws ex
}
如果使用512密钥大小,则它也可以工作,但使用OaepSHA1而不是OaepSHA256:

using (RSACng rsaCng = new RSACng(512))
{
    var result = rsaCng.Encrypt(new byte[1], RSAEncryptionPadding.OaepSHA1); // works ok
}

你知道为什么这个不能工作,以及如何让它在512+OaepSHA256上工作吗?

我已经尝试解决这个问题一段时间了。Net 4.6和Net 4.7中的默认加密算法似乎在Net中发生了变化。许多人已经将他们的工作代码升级到新的网络,并破坏了加密。只是在C++中找到了一些有趣的东西,但不知道如何应用到C。(您应该使用什么模式?它是由规范定义的还是您有证书。每个加密模式都有有效和无效选项。您不能选择任何您想要的组合。有标准。请参阅Wiki:目前我只在本地尝试,而RSA 512+OaepSHA256组合应该可以工作我让它在Java中工作,但在.NET中不行。要用RSA 2048(或1024)吗最后,但我想知道这是否是一个错误。java中的填充模式与c#不同。您使用了什么填充模式?填充在键的末尾添加随机位以隐藏真正的键大小。Sp检查与java一起使用的键中的位数。如果它是标准大小,则它有填充。我已经尝试解决此问题一段时间了NET 4.6和4.7的默认加密算法的网络出现了变化。许多人已经将工作代码升级到新的网络,并打破了加密。只是在C++中找到了一些有趣的东西,但不知道如何应用于C。在.NET内核(2.1和3.1)中也尝试过了。(您应该使用什么模式?它是由规范定义的还是您有证书。每个加密模式都有有效和无效选项。您不能选择任何您想要的组合。有标准。请参阅Wiki:目前我只在本地尝试,而RSA 512+OaepSHA256组合应该可以工作我让它在Java中工作,但在.NET中不行。要用RSA 2048(或1024)吗最后,但我想知道这是否是一个bug。java中的填充模式与c#不同。您使用的填充模式是什么?填充在键的末尾添加随机位以隐藏真正的键大小。Sp检查与java一起使用的键中的位数。如果是标准大小,则它有填充。
using (RSACng rsaCng = new RSACng(1024))
{
    var result = rsaCng.Encrypt(new byte[1], RSAEncryptionPadding.OaepSHA256); // works ok
}
using (RSACng rsaCng = new RSACng(512))
{
    var result = rsaCng.Encrypt(new byte[1], RSAEncryptionPadding.OaepSHA1); // works ok
}