2011-11-08 141 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)暗号コード(例:不正なパディング)は例外ではありません。

b)のASCIIは、これらの日あまり使用されていない、次のように:

System.Text.ASCIIEncodingのENC =新しいSystem.Text.ASCIIEncoding();

ご希望の商品が返却されない場合があります。

だから私はUFT8、Unicode、そしてすべての亜種を試してみるでしょう(どこかに書かれていない限り)。