通过 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”算法的主要内容,如果未能解决你的问题,请参考以下文章

Redis 6.0 系列 | TLS源码分析

使用c/c++ Openssl库,建立安全连接流程?

openssl数据加密

使用VS2005编译安装openssl1.1.1c

java翻译lua+c+openssl签名项目

openssl源码目录结构