用openssl實現aes加密


實驗步驟:

一,下載並安裝gcc,openssl,(OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。

yum -y install gcc

wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz

解壓openssl

tar zxf openssl-1.0.2h.tar.gz

二,把openssl移動到 /usr/local目錄下

mv openssl /usr/local

三,在/usr/localopenssl目錄下創建一個文件 enc_dec.c用來存儲算法程序

四,把所需要的規則寫到makefile文件中


LIB=-L/usr/local/lib -lcrypto

all:${OBJ}

cc ${OBJ}-o app.exe ${LIB}

${OBJ}:enc_dec.c

cc -c enc_dec.c -o ${OBJ}

.PHONY:clean

clean:

rm ${OBJ}

~

五,編譯算法程序: cc enc_dec.c -o app.exe -L/usr/local/lib -lcrypto沒有報錯,然后用make檢驗也沒有報錯。

六,執行./app.exe文件




程序代碼:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <memory.h>

#include <openssl/aes.h>

#include <openssl/evp.h>

#include <openssl/rsa.h>


void HexCode(unsigned char* data, int len)

{

int i = 0;

for(; i < len; i++)

printf("%02x", (unsigned int)data[i]);


printf("\n");

}


int main()

{

const int len = 3;

char userkey[AES_BLOCK_SIZE];

unsigned char *data = malloc(AES_BLOCK_SIZE*len);

unsigned char *cipher = malloc(AES_BLOCK_SIZE*len);

unsigned char *plain = malloc(AES_BLOCK_SIZE*len);

 

int i;

AES_KEY key;


memset((void*)userkey, 0, AES_BLOCK_SIZE);

memset((void*)data, 0, AES_BLOCK_SIZE*len);

memset((void*)cipher, 0, AES_BLOCK_SIZE*len);

memset((void*)plain, 0, AES_BLOCK_SIZE*len);


strcpy(userkey, "userkey");

strcpy(data, "original text");

printf("original text:\n");

HexCode(data, AES_BLOCK_SIZE*len);


 

AES_set_encrypt_key(userkey, 128, &key);

for(i = 0; i < len; i++)

AES_ecb_encrypt(data+i*AES_BLOCK_SIZE, cipher+i*AES_BLOCK_SIZE, &key, AES_ENCRYPT);

 

printf("cipher:\n");

HexCode(cipher, AES_BLOCK_SIZE*len);


AES_set_decrypt_key(userkey, 128, &key);

for(i = 0; i < len; i++)

AES_ecb_encrypt(cipher+i*AES_BLOCK_SIZE, plain+i*AES_BLOCK_SIZE, &key, AES_DECRYPT);

printf("plain:\n");

HexCode(plain, AES_BLOCK_SIZE*len);

 

free(data);

free(cipher);

free(plain);

return 0;

}




實現結果:




疑難小結:一開始輸入 cc enc_dec.c -o app.exe -L/usr/local/lib -lcrypto的時候出現如下錯誤


原因是:需要和OpenSSL鏈接的文件(庫和頭文件)在你Linux平台上缺少

解決辦法:centos用命令$ sudo yum install openssl-devel


ubuntu$ sudo apt-get install libssl-dev.




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM