Openssl命令行,用于三重DES HMAC,例如C#MACTripleDES

问题描述 投票:0回答:1

任何人都可以解释如何在OpenSSL命令行中制作TDES MAC吗?

我正在尝试在C中为OpenSSL API复制可运行的C#程序的某些功能,并且难以在openssl中复制.Net MACTripleDES.ComputeHash函数。这是伪数据和密钥的示例:

        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程序必须提供该数据的相同散列,以便与其更广泛的环境进行互操作。但是在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

字符串化,001000000000000000000000000000000000008000000000000000匹配c#字符串。

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

该数据太长,我期望的数据不是子字符串。与-sha1等相同。我尝试分别加密和制作摘要,不好。 MS并未说明其执行的哈希类型,并且我找不到在openssl中如何使用TDES设置MAC的文档。

所以我希望这里的人对两种平台都足够了解,以便给我一个不错的提示。

c# openssl tripledes system.security message-authentication-code
1个回答
0
投票

命令行答案:

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个字节包含hmac。

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或16字节TDES密钥的左8字节,而Key2是Rkey或16字节TDES密钥的右8字节。与命令行版本的32字节返回相反,此调用仅填充24字节的密码。您仍然需要16..23个字节。希望支持声明很直观。

© www.soinside.com 2019 - 2024. All rights reserved.