Командная строка Openssl для Triple DES HMA C like C# MACTripleDES - PullRequest
0 голосов
/ 16 апреля 2020

Может кто-нибудь объяснить, как сделать TDES MA C в командной строке OpenSSL?

Я пытаюсь дублировать некоторые функции работающей C# программы в C для API OpenSSL, и У меня проблемы с копированием. Net MACTripleDES.ComputeHa sh функции в openssl. Вот пример с фиктивными данными и ключом:

        using (MACTripleDES hmac = new MACTripleDES(Utilities.HexStringToByteArray("112233445566778899aabbccddeeff00")))
        {
            // Compute the hash of the input file.
            byte[] hashValue = hmac.ComputeHash(Utilities.HexStringToByteArray("001000000000000000000000000000008000000000000000"));
            string signature = Utilities.ByteArrayToHexString(hashValue);
            PrintToFeedback("Bogus Signature = " + signature);
        }

В результате получается «Поддельная подпись = A056D11063084B3E» Моя новая C программа должна предоставить тот же самый ха sh этих данных для взаимодействия с его более широкой средой. Но способ сделать это в openSSL ускользает от меня. Это показывает, что данные openssl начинаются так же, как данные C#:

cmd>od -tx1 bsigin
0000000 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000020 80 00 00 00 00 00 00 00

stringified, 001000000000000000000000000000008000000000000000 MATCHes строка c#.

cmd>openssl dgst -md5 -mac hmac -macopt hexkey:112233445566778899aabbccddeeff00 bsigin
HMAC-MD5(bsigin)= 7071d693451da3f2608531ee43c1bb8a

Эти данные слишком длинные и мои ожидаемые данные не являются подстрокой. То же самое для -sha1 et c. Я попытался зашифровать и сделать дайджест по отдельности, ничего хорошего. MS не говорит, что это за ha sh, и я не могу найти документацию о том, как настроить MA C с TDES в openssl.

Так что я надеюсь, что кто-то здесь знает Достаточно об обеих платформах, чтобы дать мне хороший совет.

1 Ответ

0 голосов
/ 20 апреля 2020

Ответ командной строки:

cmd>openssl enc -des-ede-cbc -K 112233445566778899aabbccddeeff00 -iv 0000000000000000 -in bsigin -out bsigout
cmd>od -tx1 bsigout
0000000 7c de 93 c6 5f b4 03 21 aa c0 89 b8 ae f3 da 5d
0000020 a0 56 d1 10 63 08 4b 3e 4c 03 41 d6 dd 9e e4 32
        ^^^^^^^^^^^^^^^^^^^^^^^

То есть форма командной строки возвращает 32 байта, а байты 16..23 содержат hma c.

Ответ API:

    DES_key_schedule SchKey1,SchKey2;
    DES_cblock iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
    DES_set_key((C_Block *)Key1, &SchKey1);
    DES_set_key((C_Block *)Key2, &SchKey2);
    DES_ede3_cbc_encrypt( (unsigned char*)input_data, (unsigned char*)cipher, inputLength, &SchKey1, &SchKey2, &SchKey1, &iv, DES_ENCRYPT); 

Где Key1 - это Lkey или левые 8 байтов 16-байтового ключа TDES, а Key2 - это Rkey или правые 8 байтов 16-байтового ключа TDES. Этот вызов заполняет только 24 байта шифра, в отличие от 32-байтового возврата версии командной строки. Вы все еще берете байты 16..23. Надеемся, что подтверждающие заявления интуитивно понятны.

...