gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:45:43 25 4
gpt4 key购买 nike

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

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

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

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

以下代码从文件中检索消息并使用 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);

附言在回复提及 rsa.ImportParameters 的答案时:我已尝试使用 rsa.ImportParameters(keyInfo),但它会抛出一个 CryptographicException(“Bad Data”)。数组大小呢?目前模数为128字节,指数为64字节。

最佳答案

使用 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但您需要设置的只是要加密的模数和指数。

关于使用模数和公共(public)指数的 C# RSA 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/949543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com