2011-11-08 93 views
0

以下標記是SAML響應的一部分。我必須解密以下CipherValue。 我將CipherValue(字符串)傳遞給以下函數,但它沒有返回正確的值,我做錯了什麼?使用RSA/ECB/PKCS1Padding解密

文件說:

  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 + p ZohYmKQsOILhM34TASzddYgeQbPfoAuC8i/4cMWYDrO + NP + n5d97FZDPs3u3gMWefhWoSt0BSEwUCbaNmS9I39ihFwyT/6rmurgLvfY0AaFz16Q3qQlH3yVdGR2j + A2spfJLyMrRcVTSff6HKa6LC7xUO9aBF2WpEw1mxI0QXMY2VMtSwdT4pzMc + itbDe9r4ZW9BZhA7qsBd0oOVRxxxNvOo9eIUlLyGRzvMbX + oOUiHkAm/oil7Vll5JzvlzVrc4dzzOUA = < /的CipherValue> < /的CipherData>

+0

請編輯您的問題,以包括上述代碼目前失敗的方式(即有什麼例外)。這會讓你更容易幫助你。 – poupou

+0

上述函數的返回值是「!??????? q ?? $ \」^?y ?? | J「。我不認爲這是一個正確的值。 – user228777

回答

1

很難確保而不能複製這個或不產生該代碼加密值。我最好的猜測,即我看過太多次,是文本編碼問題。這更可能是因爲:

a)加密代碼(例如bad padding)沒有例外;

b)中ASCII不使用非常這些天,以便執行以下操作:

System.Text.ASCIIEncoding ENC =新System.Text.ASCIIEncoding();

可能不會返回您所期望的。所以我會嘗試UFT8,Unicode ...和所有的變體(除非你有這種記錄在某處)。