使用RSACryptoServiceProvider的RSA算法

时间:2014-10-15 22:32:47

标签: c# encryption rsa

我很难理解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]的密文吗?

1 个答案:

答案 0 :(得分:1)

您似乎使用密钥k2作为RSA加密的数据。如果你想要,那就没关系,例如使用RSA包装256位AES密钥。但是你的RSA密钥是第二个参数,而不是第一个参数。

然后填充k2中的数据(根据旧的PKCS#1 v1.5方案),之后将使用公共指数执行模幂运算RSA密钥的模数。 RSA密钥的模数确定密钥大小。此模数取幂将始终在零和模数-1之间产生结果。但是,结果始终以字节为单位左键填充到密钥大小(使用名为I2OSP的函数)。

所以看起来你的结果是1024位,这意味着你的RSA密钥对也是1024位。