Расшифровка TripleDes с некоторыми неверными данными в начале - PullRequest
3 голосов
/ 10 февраля 2012

Я пытаюсь расшифровать данные с помощью 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>   "

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

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

PS Конечно, правильный путь - запрашивать размер блока у экземпляра tdes вместо ввода литерала 8

0 голосов
/ 10 февраля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...