【问题标题】:Implementation of the "Retail MAC" algorithm through the OpenSSL library on C通过 C 上的 OpenSSL 库实现“零售 MAC”算法
【发布时间】:2026-01-04 19:55:01
【问题描述】:

如果有人能分享一个使用 C 语言中的 OpenSSL 库计算Retail MAC 的校验和的算法的实现示例,我将不胜感激。我找不到这样的东西。 附言对不起我的英语

【问题讨论】:

  • 你的英语很好。您可能想发布一个您尝试过但没有奏效的示例,因此我们有一些背景信息。
  • 恐怕我的程序根本没有写完整,因为我不了解openssl库的功能。为此,我需要一些该算法的来源

标签: macos algorithm openssl crc des


【解决方案1】:

零售 MAC 使用两个单一的 DES 密钥(8 个字节):K1 和 K2。例如,K1=0110213041506170 和 K2=8190A1B0C1D0E1F0(十六进制)。

让 M 消息被 MAC 化,例如,M="abcdefghijklmnopqrstuvwxyz"。

M0 然后是填充消息(不要使用 OpenSSL 块填充!) 6162636465666768696A6B6C6D6E6F707172737475767778797A800000000000(十六进制)。

按如下方式使用 OpenSSL:

openssl enc    -des-cbc -K 0110213041506170 -iv 0000000000000000 -nopad -in M0 | \
tail -c 8 | \
openssl enc -d -des-ecb -K 8190A1B0C1D0E1F0 -nopad | \
openssl enc    -des-ecb -K 0110213041506170 -nopad | \
xxd -p -u -c32

享受 MAC 468BB08720DAC59E

题外话:请记住,零售 MAC 被视为已损坏。

【讨论】: