1. 程式人生 > >使用 openssl 的AES 加密

使用 openssl 的AES 加密

原始碼:

#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
#include <openssl/aes.h>

int main(int argc, char *argv[]){
    unsigned char buf[16] = "1234567890abcde";
    unsigned char buf2[16];
    unsigned char buf3[16];

    // 金鑰為 0
    unsigned char aes_keybuf[32] = {0};

    AES_KEY aeskey;
    // 設定加密金鑰 
AES_set_encrypt_key(aes_keybuf, 8 * sizeof(aes_keybuf), &aeskey); // 加密 AES_encrypt(buf,buf2,&aeskey); printf("%s\n",buf2); //設定解密金鑰 AES_set_decrypt_key(aes_keybuf, 8 * sizeof(aes_keybuf), &aeskey); //解密 AES_decrypt(buf2, buf3, &aeskey); printf("%s\n"
,buf3); return 0; }

openssl API 說明

int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
    AES_KEY *key);

##設定加密金鑰
## userKey 為使用者定義金鑰
## bits 金鑰長度
## 生成的金鑰(加密函式會用到)

int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
    AES_KEY *key);
##設定解密金鑰
## userKey 為使用者定義金鑰
## bits 金鑰長度 ## 生成的金鑰(解密函式會用到) //加密函式 void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); //解密函式 void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key);

個人總結:
openssl API 大概使用步驟為
設定 加密金鑰 –> 加密資料
設定 解密金鑰 –> 解密資料

關於金鑰,可以自定義;
另外需要注意的就是,加密解密的資料緩衝區必須要是16的倍數(openssl 內部實現的時候,會以16個char 為單位讀取資料,同樣,以上程式只會加密16個位元組的資料…需要加密更長的字串,把程式修改下即可)