我对理解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]大小的密文吗?
发布于 2014-10-16 06:47:08
您似乎使用密钥k2作为RSA加密的数据。这是可以的,如果你想,例如,包装一个256位AES密钥使用RSA。但是您的RSA密钥是第二个参数,而不是第一个参数。
然后填充k2中的数据(根据较旧的RSAV1.5方案),之后将使用PKCS#1密钥的公共指数和模数执行模幂运算。RSA密钥的模数决定了密钥大小。这种模幂运算将始终产生介于0和模数- 1之间的结果。但是,结果总是以字节为单位向左填充密钥大小(使用名为I2OSP的函数)。
因此,您的结果似乎是1024位,这意味着您的RSA密钥对也是1024位。
https://stackoverflow.com/questions/26393249
复制相似问题