我很难理解RSACryptoServiceProvider
类......我应该使用密钥来加密长度为256位的消息
,其中也是256位长。不应该
的输出也是256位长吗?
这是我的代码:
//key generation
byte[] bytes = new byte[32];
var rng = new RNGCryptoServiceProvider();
rng.GetBytes(bytes);
k2 = bytes;
//encryption function
static public byte[] Encryption(byte[] Data, RSAParameters RSAKey, bool DoOAEPPadding)
{
byte[] encryptedData;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
RSA.ImportParameters(RSAKey);
encryptedData = RSA.Encrypt(Data, DoOAEPPadding);
}
return encryptedData;
}
然后最后计算
ciphertext = Encryption(k2, RSA.ExportParameters(false), false);
产生byte[128]
密文,即1024位。我不应该得到大小为byte[32]
的密文吗?
答案 0 :(得分:1)
您似乎使用密钥k2
作为RSA加密的数据。如果你想要,那就没关系,例如使用RSA包装256位AES密钥。但是你的RSA密钥是第二个参数,而不是第一个参数。
然后填充k2
中的数据(根据旧的PKCS#1 v1.5方案),之后将使用公共指数和执行模幂运算RSA密钥的模数。 RSA密钥的模数确定密钥大小。此模数取幂将始终在零和模数-1之间产生结果。但是,结果始终以字节为单位左键填充到密钥大小(使用名为I2OSP的函数)。
所以看起来你的结果是1024位,这意味着你的RSA密钥对也是1024位。