2012-02-10 1 views
2

Я пытаюсь расшифровать данные с помощью tripleDes. Все выглядит отлично, но у него есть некоторые недопустимые символы в начале? Что я делаю не так? Для тех же данных, если вы снова вызываете эту функцию, эти первые несколько символов всегда разные, но остальные данные одинаковы.Дешифрование TripleDes с некоторыми недопустимыми данными в начале

Я пропускаю useHashing к false.

public static byte[] GetTripleDesDecryption(string dataToDecrypt, byte[] key, bool useHashing) 
    { 
     byte[] keyArray; 
     byte[] plainbytes = null; 
     byte[] cipherbytes; 

     try 
     { 
      if (useHashing) 
      { 
       MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); 
       keyArray = hashmd5.ComputeHash(key); 
       hashmd5.Clear(); 
      } 
      else 
       keyArray = key; 

      using (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider()) 
      { 
       tdes.Key = keyArray; 
       tdes.Mode = CipherMode.CBC; 
       tdes.Padding = PaddingMode.None; 

       using (ICryptoTransform cTransform = tdes.CreateDecryptor()) 
       { 
        cipherbytes = Convert.FromBase64String(dataToDecrypt); 
        plainbytes = cTransform.TransformFinalBlock(cipherbytes, 0, cipherbytes.Length); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      LogMessage(e.Message + " Attribute Parsing error. DataToDecrypt = " + dataToDecrypt); 
      throw e; 
     } 
     return plainbytes; 
    } 

Это то, что я получаю:

"�{c��]�sertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\"><saml:AttributeStatement><saml:Attribute Name=\"userID\"><saml:AttributeValue>456</saml:AttributeValue></saml:Attribute><saml:Attribute Name=\"financialInstitutionNumber\"><saml:AttributeValue>303986258</saml:AttributeValue></saml:Attribute><saml:Attribute Name=\"password\"><saml:AttributeValue>galaxy</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion> " 
+1

Вам необходимо капельницу, используемый при шифровании. –

+0

Можете ли вы, пожалуйста, прочесть его мне, я не занимаюсь шифрованием, исходящим от phoneApp. Я просто разбираю зашифрованный запрос. – user228777

ответ

2

Я думаю, что классы C# используют случайный IV, если он не установлен. Попытайтесь установить IV в байтовый массив из 8 байтов, оцененных 00h байт, и попытайтесь его расшифровать. Если это не сработает, вам придется каким-то образом получить IV.

PS правильный путь, конечно, просить от размера блока, например TDes вместо того, чтобы в буквальном 8

+0

Я не понимал размер блока, который я использовал. байт [] iv = {8, 7, 6, 5, 4, 3, 2, 1}; tdes.IV = iv; На этот раз первые несколько символов были такими, как 4tghh9Crsertion xmlns: saml = \ "urn: oasis: – user228777

+0

Я передал это для IV и работал байт [] iv = {00, 00, 00, 00, 00, 00, 00, 00} ; Thanks – user228777

+0

Рад, что это сработало, это было немного догадаться, хотя это был образованный :) –

0

Я смотрел назад на свой пост и видел, как вы пытаетесь расшифровать SAML утверждение. SAML 2 включен в WIF, поэтому я бы рассмотрел его загрузку и использование. Абстракция намного проще в использовании, чем попытка изобретать колесо.

Что касается первого ответа, который я дал и комментировал других: @Henk Holterman фокусируется на том, что механизм шифрования использует оба ключа (преобразованные в байты) и вектор инициализации (IV). Если используется IV, отличный от «стандартного» (т. Е. Он был указан), вы должны его сопоставить.

Как это SAML, сосредоточьтесь на расшифровке SAML, чтобы вы могли применить утверждение. Вы можете сделать это с помощью специального кода, но ваш поиск должен сосредоточиться на SAML.

+0

Это то, что в основном я использую не MD5 keyArray = key; с использованием (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider()) { tdes.Key = keyArray; tdes.Mode = CipherMode.CBC; tdes.Padding = PaddingMode.None; с использованием (ICryptoTransform cTransform = tdes.CreateDecryptor()) { cipherbytes = Convert.FromBase64String (dataToDecrypt); plainbytes = cTransform.TransformFinalBlock (cipherbytes, 0, cipherbytes.Length); } – user228777

+0

Отредактировано. Хорошая точка, поэтому я отредактировал, но расшифровка SAML по-прежнему остается проблемой, и Microsoft имеет хорошую абстракцию в WIF. Если вы не можете использовать его, рефлектор на базе кода может быть ответом. Также может быть библиотека с открытым исходным кодом на codeplex или аналогичная. –

Смежные вопросы