如何导入RSA公钥进行解密

本文关键字:公钥 解密 RSA 何导入 导入 | 更新日期: 2023-09-27 18:07:17

这似乎是一个愚蠢的问题,但我已经搜索了一个半小时。我有一条用RSA密钥对的私钥加密的消息。我有需要用来解密消息的PUBLIC KEY。我一直在寻找一种将公钥导入RSACryptoProvider的方法,但似乎找不到方法。我只是有一个BigInteger对象作为模数和指数(构成一个公钥)。我似乎找不到让它解密任何东西的方法。我试过了

System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
rsa.ImportParameters(new System.Security.Cryptography.RSAParameters { Exponent = BitConverter.GetBytes(12345), Modulus = BigInteger.Parse("HEX of public key", System.Globalization.NumberStyles.HexNumber).ToByteArray() });
_session.EncryptionKey = rsa.Decrypt(_session.EncryptionKey, false);

所做的就是抛出一个CryptographicException,表示没有密钥集。我是否需要标记一些东西,让它知道我想使用公钥解密?

如何导入RSA公钥进行解密

所做的就是抛出一个CryptographicException,表示没有密钥集。我是否需要标记一些东西,让它知道我想使用公钥解密?

。高级和中级加密库不支持私钥加密和公钥解密等异常操作。如果需要的话,您需要使用数学原语来实现RSA。

也许,你需要一个数字签名机制代替?

大多数人不使用公钥解密,因为用公钥定义的"解密"仅仅是用公钥验证签名的一个组成部分。因此,RSACryptoServiceProvider只执行VerifyHash,并使用公钥加密。

包含_session.EncryptionKey的示例代码表明您正在尝试实现混合密码系统。如果你正在实现的这个密码系统使用公共密钥来解密,那么你就没有保密性。

我已经写了一个c#实现的谷歌的高级加密框架keyczar,它包括一个易于使用的混合加密。

听到Pavel的回答后,我们决定最好还是自己算一下。我们以

结尾
var encryptionKey = new BigInteger(_session.EncryptionKey);
var result = encryptionKey.modPow(12345, BigInteger.Parse("HEX of public key", System.Globalization.NumberStyles.HexNumber).ToByteArray());
_session.EncryptionKey = result.ToByteArray();

(中间有一些空白,但由于与问题无关,我省略了它)

谢谢你的回答:)