簡體   English   中英

如何將公鑰導入RSA進行解密

[英]How to import a Public Key into RSA For decryption

這似乎是一個愚蠢的問題,但我一直在搜索最后一個半小時。 我有一條用RSA密鑰對的PRIVATE 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示例代碼表明您正在嘗試實現混合密碼系統 如果您要實現的密碼系統使用公共密鑰解密,則您不會保密。

我已經編寫了Google高級加密框架keyczar的C#實現,其中包括一個易於使用的混合加密算法

根據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();

(中間有一些填充,但是與該問題無關,因此我省略了它)

感謝所有的答案 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM