C语言MD5算法实现(基于Mbedtls)

最近项目中需要通过C语言实现MD5算法,这里我通过Mbedtls库来进行实现。

1、下载Mbedtls

首先我们将Mbedtls代码放入到工程中,相关传送门如下:

Mbedtls官方下载地址

官方网址是国外的下载慢,所以也附上本文使用到的Mbedtls代码,传送门如下:

Mbedtls加解密工具代码

2、引入Mbedtls头文件

这里我们在工程中的CMakeLists.txt中引入Mbedtls的头文件,代码如下:

# for debug
# add_compile_options(-g)

project("device-authentication")

cmake_minimum_required(VERSION 3.5)

INCLUDE_DIRECTORIES(
	../include/
    ../../src/net/mbedtls/include
	../../src/smalgo/sms4/include
)

SET(my_src_crypto
    ../../src/net/mbedtls/library/aes.c
    ../../src/net/mbedtls/library/aesni.c
    ../../src/net/mbedtls/library/base64.c
    ../../src/net/mbedtls/library/rsa.c
    ../../src/net/mbedtls/library/rsa_internal.c
    ../../src/net/mbedtls/library/entropy.c
    ../../src/net/mbedtls/library/entropy_poll.c
    ../../src/net/mbedtls/library/bignum.c
    ../../src/net/mbedtls/library/sha1.c
    ../../src/net/mbedtls/library/sha256.c
    ../../src/net/mbedtls/library/sha512.c
    ../../src/net/mbedtls/library/md.c
    ../../src/net/mbedtls/library/md5.c
    ../../src/net/mbedtls/library/md_wrap.c
    ../../src/net/mbedtls/library/ripemd160.c
    ../../src/net/mbedtls/library/platform_util.c
    ../../src/net/mbedtls/library/oid.c
    ../../src/net/mbedtls/library/timing.c
    ../../src/net/mbedtls/library/net_sockets.c
	../../src/smalgo/sms4/cbc128.c
	../../src/smalgo/sms4/sms4_cbc.c
	../../src/smalgo/sms4/sms4_common.c
	../../src/smalgo/sms4/sms4_enc.c
	../../src/smalgo/sms4/sms4_setkey.c
)
SET(my_src_crypto_dbg
    ../../src/net/mbedtls/library/ctr_drbg.c
)

SET(SRC_LIST_ENCRYPT_BIN
		oem_porting.c
		sdk_porting.c
		authref.c
		test.c
		${my_src_crypto}
		${my_src_crypto_dbg}
		)

SET(SRC_LIST_DECRYPT_LIB 
    oem_porting.c
    sdk_porting.c
    authref.c
    auth.c
    ${my_src_crypto}
    ${my_src_crypto_dbg}
		)

#SET(SRC_LIST_AUTH_DEV
#    oem_porting.c
#    sdk_porting.c
#    authref.c
#    ${my_src_crypto}
#    ${my_src_crypto_dbg}
#)

add_definitions(-fPIC)
#ADD_LIBRARY(authd STATIC ${SRC_LIST_AUTH_DEV})
ADD_LIBRARY(authoal STATIC ${SRC_LIST_DECRYPT_LIB})
ADD_EXECUTABLE(eaidkAuth ${SRC_LIST_ENCRYPT_BIN})

工程结构如下:

   

引入完成之后我们就可以开始AES代码编写。

3、Md5代码编写

authref.h 代码如下:

#ifndef __AUTHREF_H__
#define __AUTHREF_H__
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#undef DEBUG

#ifdef __cplusplus
extern "C" {
#endif

//md5加密
uint8_t md5_enc(uint8_t *encrypt, uint8_t *decrypt);

#ifdef __cplusplus
}
#endif
#endif //__AUTHREF_H__

authref.c 代码如下:

#include "authref.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include "mbedtls/md5.h"

uint8_t md5_enc(uint8_t *encrypt, uint8_t *decrypt) {
    mbedtls_md5_context md5_ctx;
    mbedtls_md5_init(&md5_ctx);
    mbedtls_md5_starts(&md5_ctx);
    mbedtls_md5_update(&md5_ctx, encrypt, strlen((char *) encrypt));
    mbedtls_md5_finish(&md5_ctx, decrypt);
}

到此我们就实现了基于Mbedtls的MD5算法。

发布了347 篇原创文章 · 获赞 383 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/qq_19734597/article/details/104061830