通过 C 上的 OpenSSL 库实现“零售 MAC”算法
Posted
技术标签:
【中文标题】通过 C 上的 OpenSSL 库实现“零售 MAC”算法【英文标题】:Implementation of the "Retail MAC" algorithm through the OpenSSL library on C 【发布时间】:2018-01-29 14:09:47 【问题描述】:如果有人能分享一个使用 C 语言中的 OpenSSL 库计算Retail MAC 的校验和的算法的实现示例,我将不胜感激。我找不到这样的东西。 附言对不起我的英语
【问题讨论】:
你的英语很好。您可能想发布一个您尝试过但没有奏效的示例,因此我们有一些背景信息。 恐怕我的程序根本没有写完整,因为我不了解openssl库的功能。为此,我需要一些该算法的来源 【参考方案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 被视为已损坏。
【讨论】:
以上是关于通过 C 上的 OpenSSL 库实现“零售 MAC”算法的主要内容,如果未能解决你的问题,请参考以下文章