日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

C语言实现AES加密解密

發(fā)布時(shí)間:2025/3/11 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言实现AES加密解密 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AES加密是美國(guó)聯(lián)邦政府采用的一種塊加密標(biāo)準(zhǔn),如今已經(jīng)被全世界廣為使用。嵌入式開發(fā)中我們也經(jīng)常會(huì)用到加密解密算法,如果沒有硬件模塊來實(shí)現(xiàn),就需要用到C代碼軟件實(shí)現(xiàn)。下面介紹調(diào)用mbedTLS中的AES加密解密函數(shù)實(shí)現(xiàn)AES算法。

mbedTLS是一個(gè)開源TLS協(xié)議棧,主要用于嵌入式開發(fā),其源代碼網(wǎng)址為https://tls.mbed.org/aes-source-code。在該頁面上點(diǎn)擊downloadmbedTLS即可下載最新的協(xié)議棧,解壓該壓縮包就可以得到協(xié)議棧源代碼。協(xié)議棧中的各種算法都獨(dú)立封裝在C文件中,彼此耦合度較低,目的是便于調(diào)用。我這里下的是2.2.1版本,解壓后可以看到mbedtls-2.2.1\include\mbedtls路徑下有許多header文件,將其添加到IDE的頭文件中。在mbedtls-2.2.1\library下有許多c文件,我們只添加需要用到的aes.c。

這里使用Visual Studio2013 C/C++環(huán)境進(jìn)行編譯演示。新建控制臺(tái)應(yīng)用,空工程。在Header Files文件夾下添加頭文件,注意連文件夾一起添加,因?yàn)镃文件中的include是包含路徑的。然后把a(bǔ)es.c添加到source文件夾里。此時(shí)直接編譯就能通過啦!


接下來就是在主函數(shù)里調(diào)用函數(shù)。這里調(diào)用了ECB模式和CBC模式兩種。源代碼如下:

#include<stdio.h> #include "mbedtls/aes.h" #include "mbedtls/compat-1.3.h"#define AES_ECB 0 #define AES_CBC 1 #define AES_CFB 2 #define AES_CTR 3 #define MODE AES_ECBunsigned char key[16] = { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 }; unsigned char plain[32] = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 }; unsigned char plain_decrypt[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned char IV[16]; unsigned char cypher[32]; int i = 0; mbedtls_aes_context aes;void SetIV() {int i;for (i = 0; i < 16; i++){?IV[i] = 0x55;}} int main() {if (MODE == AES_ECB){mbedtls_aes_setkey_enc(&aes, key, 128);// ?set encrypt key?? ??? ??? ?mbedtls_aes_crypt_ecb(&aes, AES_ENCRYPT, plain, cypher);mbedtls_aes_setkey_dec(&aes, key, 128);// ?set decrypt keymbedtls_aes_crypt_ecb(&aes, AES_DECRYPT, cypher, plain_decrypt);i++;?? ??? ??? ?}if (MODE == AES_CBC){mbedtls_aes_setkey_enc(&aes, key, 128);// ?set encrypt keySetIV();mbedtls_aes_crypt_cbc(&aes, AES_ENCRYPT, 32, IV, plain, cypher);mbedtls_aes_setkey_dec(&aes, key, 128);// ?set decrypt keySetIV();mbedtls_aes_crypt_cbc(&aes, AES_DECRYPT, 32, IV, cypher, plain_decrypt);i++;?? ??? ??? ?} }



單步運(yùn)行,在 debug 窗口中可以觀察到 cypher 數(shù)組的值改變,變?yōu)榧用芎蟮闹?#xff0c;以及 plain _decrypt 數(shù)組中的值變?yōu)榻饷芎蟮闹?#xff0c;也就是和 plain 數(shù)組中一樣。J~

?

總結(jié)

以上是生活随笔為你收集整理的C语言实现AES加密解密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。