当前位置:   article > 正文

aes128 cmac java,C语言实现AES-128 CMAC算法

aes128-cmac

MessageAuthentication Code(MAC)是一种保障信息完整性和认证的密码学方法,其中CMAC的全称是Cypher-Based

Message Authentication Code,基于AES等对称加密方式实现消息认证。通信双方需要共享一个对称密钥,由发送方生成一个MAC值,附在消息后面,接收方计算收到消息的MAC,如果和收到的MAC一致,则说明没有被篡改,并且能确认发送方一定拥有相同的密钥,即认证身份。

美国国家标准与技术研究院NIST推荐了一种CMAC计算方式,可以避免CBC-MAC带来的缺点,编号为800-3B,文档可以从其官网上下载。该算法通过MAC密钥生成k1和k2两个子密钥,并规定了数据位填充的规则,可以通过AES-128、AES-192、AES-256三种模式进行MAC计算,支持所有整数字节的数据以及长度为0的输入。下图为MAC算法处理不需要位填充和需要位填充的两种情况。本文介绍AES-128生成的CMAC实现。

97415eca387a1225db3195890cefbdcb.png

本C代码外部依赖项是mbedTLS的密码学库,下载及使用见《C语言实现AES加密解密》。

55ec2faf725863810335e3748b5175cb.png

表1外部调用列表

本CMAC算法包括的内部函数如下。

b00a2f0afbb7289df425ad5cfb0987fa.png

表2本代码中设计的函数

本CMAC算法包括的全局变量如下。

b03695dc4be6515d6f70e8723d0faf5f.png

表3本代码中的全局变量

CMAC实现部分代码如下:

#include

#include "mbedtls/aes.h"

#include "mbedtls/compat-1.3.h"

uint8_t MAC[16];

uint8_t MACkey[16];

uint8_t k1[16];

uint8_t k2[16];

mbedtls_aes_context aes;

void leftshift(int len, uint8_t* add, uint8_t*des)

{

int i;

for (i = 0; i < len - 1; i&#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/51917
推荐阅读
相关标签
  

闽ICP备14008679号