2013-10-08 208 views
3

我試圖使用RSA公鑰對消息進行加密,並使用我的私鑰對其進行解密。它對郵件進行了加密,但我無法對其進行解密。在最後的過程之後,該消息仍然被加密。當我導出私鑰時,它也包含了公鑰。我試圖刪除公鑰,但它不起作用。 這裏有私鑰和公鑰使用RSA公鑰和私鑰在C#中加密數據

//This is the public key 
private const string public_key = "<RSAKeyValue><Modulus>uznzVPilsR1rWPkpq6m6IALaafDnVZTDDcnEyBD3A/PBx2JZTKM0DTgiTDDwCEmQBNBpPILcIBdtg3aSUgicair+2ksYrVFT+uiy0Zy1nU6qoJ+SsapLKrpCa1zHpV4LMO/pFo4Foqzw0C1FNe56FXo1xj77GPgeYl0MHUVtAUc=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; 

//This is the private and public key. 
private const String private_key = "<RSAKeyValue><Modulus>uznzVPilsR1rWPkpq6m6IALaafDnVZTDDcnEyBD3A/PBx2JZTKM0DTgiTDDwCEmQBNBpPILcIBdtg3aSUgicair+2ksYrVFT+uiy0Zy1nU6qoJ+SsapLKrpCa1zHpV4LMO/pFo4Foqzw0C1FNe56FXo1xj77GPgeYl0MHUVtAUc=</Modulus><Exponent>AQAB</Exponent><P>+jPKs9JxpCSzNY+YNanz49Eo/A6RaU1DZWoFm/bawffZOompeL1jzpUlJUIrKVZJkNFvlxE90uXVwjxWBLv9BD==</P><Q>v5CVWKZ5Wo7W0QyoEOQS/OD8tkKS9DjzZnbnuo6lhcMaxsBrCWLstac1Xm2oFNtZgLtrPGbPfCNC5Su4Rz/P5w==</Q><DP>ZnyikmgobqEt20m3gnvcUDxT+nOJMsYYTklQhONoFj4M+EJ9bdy+Lle/gHSLM4KJ3c08VXgVh/bnSYnnfkb20Q==</DP><DQ>sSYGRfWk0W64Dpfyr7QKLxnr+Kv186zawU2CG44gWWNEVrnIAeUeWxnmi41CWw9BZH9sum2kv/pnuT/F6PWEzw==</DQ><InverseQ>XpWZQKXa1IXhF4FX3XRXVZGnIQP8YJFJlSiYx6YcdZF24Hg3+Et6CZ2/rowMFYVy+o999Y5HDC+4Qa1yWvW1vA==</InverseQ><D>Kkfb+8RrJqROKbma/3lE3xXNNQ7CL0F5CxQVrGcN8DxL9orvVdyjlJiopiwnCLgUHgIywceLjnO854Q/Zucq6ysm2ZRq36dpGLOao9eg+Qe8pYYO70oOkEe1HJCtP1Laq+f3YK7vCq7GkgvKAI9uzOd1vjQv7tIwTIADK19ObgE=</D></RSAKeyValue>"; 

//Encrypting the text using the public key 
private RSACryptoServiceProvider cipher = null; 
cipher = new RSACryptoServiceProvider(); 
      cipher.FromXmlString(public_key); 
      byte[] data = Encoding.UTF8.GetBytes(txtUnencrypt.Text); 
      byte[] cipherText = cipher.Encrypt(data, false); 
      lblUnencryptMessage.Text = Convert.ToBase64String(cipherText); 

     // decryptText(); 

//Trying to decrypt the text using the private key 

cipher = new RSACryptoServiceProvider(); 
      cipher.FromXmlString(private_key); 

      byte[] ciphterText = Convert.FromBase64String(lblUnencryptMessage.Text); 
      byte[] plainText = cipher.Decrypt(ciphterText, false); 
      lblDecript.Text = Convert.ToBase64String(plainText); 

缺少什麼我在這裏?

更新時間上午11點37

例如,我加密的字 「測試」,加密的文本被kkqs + UGHNI7/3cKhQvSnJrKzNeCBQX9xHX2VrlyMvnwtszJAoFuViBZlfwmpVhqddnVUrlaqqkD7971E8L3wWltfGetK9nIljeo0GeietLYljoY0Gy3gatU ++ JPrqajAKxpIB75tvVlKXuYIs0qE3XWZu9bj0zAa4BVT2MhVNQM =」

解密文是 dGVzdGluZw ==

+0

當我嘗試運行你的代碼時,它會拋出一個異常。當你運行它會發生什麼? –

+0

@GregS,它沒有給我一個例外,它只是不解密文本。我更新了原文以包含一個例子。 –

回答

8

加密/解密代碼似乎沒有問題,只是你如何處理解密的數據。 LY這一行:

lblDecript.Text = Convert.ToBase64String(plainText); 

你正在服用的解密數據和Base64編碼它,這就是爲什麼你:dGVzdGluZw ==(因爲這是字符串「測試」的Base64編碼版本)。

您需要改用以下內容:

lblDecript.Text = Encoding.UTF8.GetString(plainText); 

這應該解密的字節數組正確地轉換爲原始字符串。

-2

我發現這裏

輔助類的完全手冊這將解釋如何驗證在asp.net C#環境JWS令牌,還它驗證時間到期。

檢查下面的鏈接

http://www.techdoubts.net/2015/01/json-web-signature-jws-rsa-public-key-aps-net.html上,這將有助於初學者了。

+1

一個潛在的解決方案的鏈接總是受歡迎的,但請[添加鏈接上下文](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really -good-answers/8259#8259),所以你的同行們會有一些想法是什麼,爲什麼它在那裏。如果目標網站無法訪問或永久離線,請始終引用重要鏈接中最相關的部分。考慮到僅僅是一個鏈接到外部網站是一個可能的原因[爲什麼和如何刪除一些答案?](http://stackoverflow.com/help/deleted-answers)。 – FelixSFD

+0

我只是提供了上下文和使用,我認爲這是asp.net中的asp.net RSA公鑰驗證的有效答案。 –