簡體   English   中英

使用RSA / ECB / PKCS1Padding解密

[英]Decryption with RSA/ECB/PKCS1Padding

以下標記是SAML響應的一部分。 我必須解密以下CipherValue。 我將CipherValue(string)傳遞給以下函數,但未返回正確的值,我在做什么錯?

文檔說:

  1. 從證書中獲取私鑰。

  2. 使用RSA / ECB / PKCS1Padding解密加密的密鑰。

(關鍵是跟隨值)

private string RSADecryption(string dataToDecrypt) 
{

  String certificateLocation = ConfigurationManager.AppSettings.Get("CertificateLocation");
  String certificateStore = ConfigurationManager.AppSettings.Get("CertificateStore");
  string certificateSubject = ConfigurationManager.AppSettings.Get("CertificateSubject");
  String decryptedKey = string.Empty;
  try
  {
      X509Certificate2 encryptionCertificate = X509Utilities.GetCertificateBySubject(certificateSubject, certificateStore.ParseAsEnum<StoreName>(),
      certificateLocation.ParseAsEnum<StoreLocation>());
      if (encryptionCertificate == null )
          Helper.LogMessage(" Did not find Encryption Certificate on the sserver " );
      RSACryptoServiceProvider rsaProvider = (RSACryptoServiceProvider)encryptionCertificate.PrivateKey;
      byte[] cipherbytes = Convert.FromBase64String(dataToDecrypt);
      byte[] plainbytes = rsaProvider.Decrypt(cipherbytes, false);
      System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
      decryptedKey =  enc.GetString(plainbytes);
  }

  catch (Exception e)
  {
      Helper.LogMessage(e.Message + " Key Parsing error. DataToDecrypt = " + dataToDecrypt);
      throw e;
  }
  return decryptedKey;

<的CipherData> <的CipherValue> HQrhmJpbd0p32QjOFrOKQhNSr4q6bcbg + 9AhxJS6yZR19Nqh3VDMwOW2wsCBuSmFlv7WjR7TzW6URjINvNbv2nMfsKu3M9dscxhmGY + jVtUJ6sTf7FHdK9D76miAdq1EIsm0lNtdW5etMx / 85iMiFOObbyZuB8oaYeThToVjTUVYfNGQOJ99wvh8OL / 40eomDlKfwN4eQ88kVbY1eUO1OxEfQsUbDWyXvZEvBPmYUb7km + C6rX8UjsLUrqOOpXym9oi5dH + T + kAP2Rb5N16VRxJHPGF / gXeuD + Jq4FSGtjiiBE9qvBIFWkt4hYabSgUE3Li5DqMoH / P9 / EGqf6mpyvHjv8yJYRTpA // 5nM43z / KCUFX8VrFCXBp0N1Y40zpZWJW2y9fSIlyGyMas1ByBlkxpRgjqqnv1L + pZohYmKQsOILhM34TASzddYgeQbPfoAuC8i / 4cMWYDrO + NP + n5d97FZDPs3u3gMWefhWoSt0BSEwUCbaNmS9I39ihFwyT / 6rmurgLvfY0AaFz16Q3qQlH3yVdGR2j + A2spfJLyMrRcVTSff6HKa6LC7xUO9aBF2WpEw1mxI0QXMY2VMtSwdT4pzMc + itbDe9r4ZW9BZhA7qsBd0oOVRxxxNvOo9eIUlLyGRzvMbX + oOUiHkAm / oil7Vll5JzvlzVrc4dzzOUA = </ CipherValue> </ CipherData>

如果不能復制此代碼或沒有生成加密值的代碼,就很難確定。 我最好的猜測(即我已經看過太多次了)是文本編碼問題。 由於以下原因,這種可能性更大:

a)密碼也不例外(例如,填充錯誤);

b)如今,ASCII的使用率不高,因此請注意以下幾點:

System.Text.ASCIIEncoding enc =新的System.Text.ASCIIEncoding();

可能無法返回您的期望。

因此,我將嘗試UFT8,Unicode ...和所有變體(除非您在某處記錄了此文檔)。

暫無
暫無

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

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