如何导入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,表示没有密钥集。我是否需要标记一些东西,让它知道我想使用公钥解密?
所做的就是抛出一个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();
(中间有一些空白,但由于与问题无关,我省略了它)
谢谢你的回答:)