试图了解 RSACryptoServiceProvider 密钥和消息长度关系
Trying to understand RSACryptoServiceProvider key and message length relationship
我试图更好地理解 .Net 中的密码学 类,但我遇到了一个我不太清楚的情况。我正在关注这个 RSACryptoServiceProvider example.
的精简版
我的简化版是这样的:
string plainText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus.";
var byteConverter = new UnicodeEncoding();
//Works with longer string length
using var rsa = RSA.Create();
byte[] encrypted2 = rsa.Encrypt(byteConverter.GetBytes(plainText), RSAEncryptionPadding.OaepSHA1);
//fails if string's length is too long
using var rsa2 = new RSACryptoServiceProvider();
byte[] encrypted = rsa2.Encrypt(byteConverter.GetBytes(plainText), false);
如果你像这样在 "elit" 处切断字符串:
string plainText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
然后两者都起作用。
当我使用提供者的重载构造函数并为其提供充足的密钥大小时,如下所示:
using var rsa2 = new RSACryptoServiceProvider(2048);
然后它可以加密整个字符串的长度。
密钥大小和消息长度之间有什么关系?确定我需要什么大小的密钥的最佳方法是什么以及为什么要使用 RSA。创建方法对字符串的长度没有问题?
RSACryptoServiceProvider
简单地实现 PKCS#1 v2.0 及更高版本中指定的方案(PKCS#1 2.2 是当前版本)。我已经指定了开销和剩余的有效负载 here。它与语言/运行时无关。
虽然 PKCS#1 v1.5 填充的开销较小,但 OAEP 更安全(它具有针对 RSA 的安全证明)并且通常应该使用。 PKCS#1 v1.5 对于总共 61 位的随机组件只有 11 个开销字节。然而,好的做法确实需要双倍的随机分量——开销为 11 + 8 = 19 字节。
我试图更好地理解 .Net 中的密码学 类,但我遇到了一个我不太清楚的情况。我正在关注这个 RSACryptoServiceProvider example.
的精简版我的简化版是这样的:
string plainText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus.";
var byteConverter = new UnicodeEncoding();
//Works with longer string length
using var rsa = RSA.Create();
byte[] encrypted2 = rsa.Encrypt(byteConverter.GetBytes(plainText), RSAEncryptionPadding.OaepSHA1);
//fails if string's length is too long
using var rsa2 = new RSACryptoServiceProvider();
byte[] encrypted = rsa2.Encrypt(byteConverter.GetBytes(plainText), false);
如果你像这样在 "elit" 处切断字符串:
string plainText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
然后两者都起作用。
当我使用提供者的重载构造函数并为其提供充足的密钥大小时,如下所示:
using var rsa2 = new RSACryptoServiceProvider(2048);
然后它可以加密整个字符串的长度。
密钥大小和消息长度之间有什么关系?确定我需要什么大小的密钥的最佳方法是什么以及为什么要使用 RSA。创建方法对字符串的长度没有问题?
RSACryptoServiceProvider
简单地实现 PKCS#1 v2.0 及更高版本中指定的方案(PKCS#1 2.2 是当前版本)。我已经指定了开销和剩余的有效负载 here。它与语言/运行时无关。
虽然 PKCS#1 v1.5 填充的开销较小,但 OAEP 更安全(它具有针对 RSA 的安全证明)并且通常应该使用。 PKCS#1 v1.5 对于总共 61 位的随机组件只有 11 个开销字节。然而,好的做法确实需要双倍的随机分量——开销为 11 + 8 = 19 字节。