日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言实现AES加密解密

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

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

mbedTLS是一個開源TLS協(xié)議棧,主要用于嵌入式開發(fā),其源代碼網(wǎng)址為https://tls.mbed.org/aes-source-code。在該頁面上點擊downloadmbedTLS即可下載最新的協(xié)議棧,解壓該壓縮包就可以得到協(xié)議棧源代碼。協(xié)議棧中的各種算法都獨立封裝在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)境進行編譯演示。新建控制臺應(yīng)用,空工程。在Header Files文件夾下添加頭文件,注意連文件夾一起添加,因為C文件中的include是包含路徑的。然后把aes.c添加到source文件夾里。此時直接編譯就能通過啦!


接下來就是在主函數(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++;?? ??? ??? ?} }



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

?

總結(jié)

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

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