1. 程式人生 > >Linux下使用openssl的AES加密-ECB模式

Linux下使用openssl的AES加密-ECB模式

最近需要用到AES加密,為了圖方便就打算使用openssl自帶的AES加密演算法的API來實現。
主要用到了ECB和CBC兩種加密模式。

ECB模式如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <openssl/aes.h>

int main(int argc, char**argv) {
  if(argc != 2) {
    printf("使用方法為:\n./ecb text\ntext為待加密的明文。\n"
); return -1; } unsigned char *data = argv[1]; //接收引數 printf("原始資料:%s\n",data); int length = ((strlen(data)+AES_BLOCK_SIZE-1)/AES_BLOCK_SIZE)*AES_BLOCK_SIZE; //對齊分組 char userkey[AES_BLOCK_SIZE]; unsigned char *encrypt_result = malloc(length); unsigned char *decrypt_result = malloc(length); AES_KEY key; memset
((void*)userkey,'k',AES_BLOCK_SIZE); memset((void*)encrypt_result, 0, length); memset((void*)decrypt_result, 0, length); AES_set_encrypt_key(userkey, AES_BLOCK_SIZE*8, &en_key); printf("加密金鑰:%d\n",en_key); int len = 0; /*迴圈加密,每次只能加密AES_BLOCK_SIZE長度的資料*/ while(len < length) { AES_encrypt(data+len, encrypt_result+len, &en_key); len += AES_BLOCK_SIZE; } printf
("加密結果:%s\n",encrypt_result); AES_set_decrypt_key(userkey, AES_BLOCK_SIZE*8, &de_key); printf("解密金鑰:%d\n",de_key); len = 0; /*迴圈解密*/ while(len < length) { AES_decrypt(encrypt_result+len, decrypt_result+len, &de_key); len += AES_BLOCK_SIZE; } printf("解密結果:%s\n",decrypt_result); }