我正在嘗試使用PHP爲服務器和客戶端的C#表單應用程序創建一個聯機數據庫應用程序。 在服務器上,我使用PHPSecLib使用公共RSA密鑰加密簡單字符串。然後C#應用程序收到該字符串並嘗試使用相應的私鑰對其進行解密。 字節在服務器上以base64編碼,並由C#再次解碼爲字節。我使用PHPSecLib創建了密鑰對。System.IO.IOException:----- END RSA PRIVATE KEY not found
這是我在客戶端應用程序中使用的代碼:
public string rsa_decrypt(string encryptedText, string privateKey) {
byte[] bytesToDecrypt = Convert.FromBase64String(encryptedText);
Pkcs1Encoding decrypter = new Pkcs1Encoding(new RsaEngine());
//the error occurs on this line:
AsymmetricCipherKeyPair RSAParams = (AsymmetricCipherKeyPair)new PemReader(new StringReader(privateKey)).ReadObject();
decrypter.Init(false, RSAParams.Private);
byte[] decryptedBytes = decrypter.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length);
string decryptedString = Convert.ToBase64String(decryptedBytes);
return decryptedString;
}
但是,我得到上面^指定的行下面的錯誤。
類型 'System.IO.IOException' 的未處理的異常發生在 BouncyCastle.Crypto.dll
其他信息:----- END RSA私有密鑰未發現
我相信密鑰對組合沒有任何問題,因爲在我甚至嘗試解密任何內容之前,我都會收到錯誤信息。目前 的privateKey
參數是硬編碼到腳本中使用此格式:
string privateKey = "-----BEGIN RSA PRIVATE KEY-----XXXXXXXX-----END RSA PRIVATE KEY-----";
所以,在我看來實際上包含字符串中的頁腳...我已經調試到處一派,但我似乎無法到解決這個問題。我對RSA & Bouncycastle很新,所以也許我只是使用錯誤的方法。
希望你能幫忙,謝謝! - G4A
P.S.這是我的第一個Stackoverflow問題,我剛剛創建了一個帳戶,所以如果你也可以就我提出這個問題的方式給我一些反饋;大!
IIRC你需要在預先邊界之間的一條線; ''-----開始RSA私鑰----- \ r \ nXXXXXXXX \ r \ n -----結束RSA私鑰-----「' –
歡迎來到SO,G4A!這個問題沒有太大的錯誤,很好的問題,出色的格式。有四點需要進一步改進:1)以實際問題結束(你知道,以問號結尾)2)「希望你能幫忙,謝謝!-4GA」不是必需的,實際上並不是首選3)PS應該是在問題下面的評論,4)請回復我們以幽默的方式回答我們的問題AlexK。當他提出一個解決方案(他不確定,因此評論而不是答案)。 –
這樣做@AlexK。我確實已經嘗試過,但我忘了回車。你能否刪除你的評論,並將其作爲答案,以便我可以給你業力,或無論它叫什麼。並感謝@Maarten Bodewes我會記住它。最後,對於遲到的答案感到抱歉;我想我的電子郵件尚未正確設置。 – G4A