c语言算法大全,adrc算法C语言实现

最近的项目需要用c语言实现AES算法,但这里是用Mbedtls库实现的。

1、下载Mbedtls

首先,将Mbedtls代码放入项目中。 相关传送门如下。

官网海外下载很慢,还附上正文中使用的Mbedtls代码。 传送门如下。

2、引入Mbedtls头文件

在本例中,我们将在项目的CMakeLists.txt中引入Mbedtls头文件。 代码如下。

# for debug

#add_compile_options-g ) )

项目设备认证) )

cmake _ minimum _ required 版本3.5 ) )。

INCLUDE_DIRECTORIES

./include/

././src/net/mbedtls/include

././src/smalgo/sms4/include

setmy_src_crypto

././src/net/mbed TLS/library/AES.c

././src/net/mbed TLS/library/AES ni.c

././src/net/mbed TLS/library/base64.c

././src/net/mbed TLS/library/RSA.c

././src/net/mbed TLS/library/RSA _ internal.c

././src/net/mbed TLS/library/entropy.c

././src/net/mbed TLS/library/entropy _ poll.c

././src/net/mbed TLS/library/bignum.c

././src/net/mbed TLS/library/sha1.c

././src/net/mbed TLS/library/sha 256.c

././src/net/mbed TLS/library/sha 512.c

././src/net/mbed TLS/library/MD.c

././src/net/mbed TLS/library/MD5.c

././src/net/mbed TLS/library/MD _ wrap.c

././src/net/mbed TLS/library/ripemd160.c

././src/net/mbed TLS/library/platform _ util.c

././src/net/mbed TLS/library/oid.c

././src/net/mbed TLS/library/timing.c

././src/net/mbed TLS/library/net _ sockets.c

././src/smalgo/sms4/cbc128.c

././src/smalgo/sms4/sms4_cbc.c

././src/sm algo/SMS4/SMS4_ common.c

././src/smalgo/sms4/sms4_enc.c

././src/sm algo/SMS4/SMS4_ setkey.c

setmy_src_crypto_DBG

././src/net/mbed TLS/library/CTR _ drbg.c

setsrc_list_encrypt_bin

oem_porting.c

sdk_porting.c

authref.c

test.c

${my_src_crypto}

${my_src_crypto_dbg}

setsrc_list_decrypt_lib

oem_porting.c

sdk_porting.c

authref.c

auth.c

${my_src_crypto}

${my_src_crypto_dbg}

#集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静态$ { src _ list _ auth _ dev } )

add _ library authoalstatic $ src _ list _ decrypt _ lib ) ) ) ) )

add _ executable eaidkauth $ { src _ list _ encrypt _ bin } )

工程结构如下。

部署完成后,可以启动AES代码sldbm。

3、AES码sldbm

authref.h头文件中的代码如下:

#ifndef __AUTHREF_H__

#define __AUTHREF_H__

#包含

#包含

#包含

#包含

# undef调试

#define AES_KEY_SIZE 48

#define AES_IV_LEN 16

#ifdef __cplusplus

扩展’ c ‘ {

#endif

//aes加朴素发夹/p //aes_key –最长48字节

//iv –最长16字节

//plaintext –要加密的文本

//ciphertext –加密的文本

//len — len should be 16*N bytes

//return0 forok,else for error

int AES _ CBC _ encr yp uint8_ t * AES _ key,uint8_t *iv,uint8_t *plaintext,uint8_t *ciphertext,uint330

//aes朴素发夹/p //aes_key –最长48字节

//iv –最长16字节

//ciphertext –要解密的文本

//plaintext –解密的文本

//len — len should be 16*N bytes

//return0 forok,else for error

int AES _ CBC _ decryp uint8_ t * AES _ key,uint8_t *iv,uint8_t *ciphertext,uint8_t *plaintext,uint330

#ifdef __cplusplus

}

#endif

#endif //__AUTHREF_H__

authref.c代码如下:

#include ‘authref.h ‘

#include ‘mbedtls/entropy.h ‘

#include ‘mbedtls/ctr_drbg.h ‘

#include ‘mbedtls/aes.h ‘

//len should be 16*N bytes

int AES _ CBC _ encr yp uint8_ t * AES _ key,uint8_t *iv,uint8_t *plaintext,uint8_t *ciphertext,uint330

int i;

intblk=len15 ) 4;

mbedtls_aes_context aes_ctx;

mbedTLS_AES_initAES_CTX;

//setkey_dec

mbedTLS_AES_setkey_encAES_CTX,aes_key,256 );

forI=0; i blk; I ) {

mbedTLS_AES_crypt_CBCAES_CTX,MBEDTLS_AES_ENCRYPT,16,iv,plaintextI*16 ),ciphertext ) I*16

}

mbedTLS_AES_freeAES_CTX );

返回0; //OK

}

//len should be 16*N bytes

int AES _ CBC _ decryp uint8_ t * AES _ key,uint8_t *iv,uint8_t *ciphertext,uint8_t *plaintext,uint330

int i;

intblk=len15 ) 4;

mbedtls_aes_context aes_ctx;

mbedTLS_AES_initAES_CTX;

//setkey_dec

mbedTLS_AES_setkey_decAES_CTX,aes_key,256 );

forI=0; i blk; I ) {

mbedTLS_AES_crypt_CBCAES_CTX,MBEDTLS_AES_DECRYPT,16,iv,ciphertextI*16 ),plaintext ) I*16

}

mbedTLS_AES_freeAES_CTX );

返回0; //OK

}

幽默的铅笔/解密伪代码如下。

ret=AES_CBC_encrypkey,iv,uuid,uint8_t* ) data,64 );

ret=AES_CBC_decrypkey,iv,uuid,uint8_t* ) data,64 );

这个有趣的铅笔解读介绍完成了。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注