谁能解释如何在 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);
}
结果是“Bogus 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
字符串化,001000000000000000000000000000008000000000000000 匹配 c# 字符串。
cmd>openssl dgst -md5 -mac hmac -macopt hexkey:112233445566778899aabbccddeeff00 bsigin
HMAC-MD5(bsigin)= 7071d693451da3f2608531ee43c1bb8a
该数据太长,我预期的数据不是子字符串。-sha1 等也一样。我尝试分别加密和制作摘要,不好。MS没有说它做了什么样的哈希,我找不到关于如何在openssl中使用TDES设置MAC的文档。
所以我希望这里有人对这两个平台有足够的了解,能给我一个体面的提示。