使用模数和公共指数的C#RSA加密

时间:2009-06-04 09:44:18

标签: c# encryption rsa

我必须使用AES和RSA实现数字信封,但我遇到了RSA算法的.NET实现问题。

我已设法使用随机对称密钥加密数据(AES),但现在我必须使用RSA加密密钥。

密钥是一个字节数组(byte[]),我公开的密钥只告诉我模数和公共指数,两个字节数组(byte[])。

仅使用这两个参数,如何使用RSA加密AES生成的密钥?

以下代码从文件中检索邮件并使用AES对其进行加密。 然后,从公钥文件中读取公钥,并且模数和指数在其适当的字节数组中。如何继续使用RSA加密symmetricKey

String msgString = Systematic.GetFileContents(messagePath);
Byte[] initVector = new byte[] { 50, 60, 70, 80, 90, 40, 50, 60, 70, 80, 90, 40, 60, 80, 70, 90 };
Byte[] symetricKey = AesCrypt.GenerateRandomKey();
Byte[] encryptedMessage = AesCrypt.Encrypt(msgString, symetricKey, initVector, mode);
Byte[] modulus = null;
Byte[] publicExp = null; 
DataFormatHelper.ReadPublicKey(publicKeyPath, "RSA", ref modulus, ref publicExp);

P.S。在回答提及rsa.ImportParameters的答案时: 我尝试使用rsa.ImportParameters(keyInfo),但它会抛出CryptographicException"Bad Data")。数组大小怎么样? 目前,模数为128字节,指数为64字节。

1 个答案:

答案 0 :(得分:5)

使用RSACryptoServiceProvider

static public byte[] RSAEncrypt(byte[] data,
    RSAParameters keyInfo, 
    bool doOAEPPadding)
{
    byte[] encryptedData;
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        //Import the RSA Key information. This only needs
        //toinclude the public key information.
        rsa.ImportParameters(keyInfo);

        //Encrypt the passed byte array and specify OAEP padding.  
        //OAEP padding is only available on Microsoft Windows XP or later.  
        encryptedData = rsa.Encrypt(data, doOAEPPadding);
    }
    return encryptedData;       
}

所以你需要的是RSAParameters,但你需要设置的只是要加密的模数和指数。