使用 openssl 的AES 加密
阿新 • • 發佈:2019-02-14
原始碼:
#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個位元組的資料…需要加密更長的字串,把程式修改下即可)