openssl之aes對稱加密


AES:密碼學中的高級加密標准(Advanced Encryption Standard,AES),又稱 Rijndael加密法。

 

對稱加密:用同一個密碼  加密/解密  文件。

 

使用openssl中的兩函數加密解密  (默認只能加密16字節)

AES_set_encrypt_key(unsigned char*)key, int, &AES_KEY)  --  加密密鑰

AES_set_decrypt_key(unsigned char*)key, int, &AES_KEY)  --  解密密鑰

AES_cbc_encrypt(unsigned char*)str_in, (unsigned char*)out, int len, &AES_KE Y, unsigned char*,  AES_DECRYPT)

#include "openssl/aes.h"

unsigned char key[AES_BLOCK_SIZE];
unsigned char iv[AES_BLOCK_SIZE];

#define AES_BITS 10240
#define MSG_LEN 10240

/**********************************************************
函數名:getlen
參數:char *result        --字符串地址
返回值:int                --字符串長度
說明:                    --獲取字符串長度
***********************************************************/
int getlen(char *result){
    int i = 0;
    while (result[i] != '\0'){
        i++;
    }
    return i;
}

 

加密:

/**********************************************************
函數名:aes_encrypt
參數:const char* str_in        --輸入字符
參數:unsigned char* key        --key
參數:unsigned char* out        --輸出字符
返回值:int                      --0失敗  1成功
說明:加密 
***********************************************************/
int aes_encrypt(char* str_in, char* key, char* out)
{
    if (!str_in || !key || !out) return 0;

    //加密的初始化向量
    unsigned char iv[AES_BLOCK_SIZE];

    //16位密碼
    char tmpIV[] = "0123456789abcdef";
    for (int i = 0; i < 16; ++i)
        iv[i] = tmpIV[i];
    
    AES_KEY aes;
    if (AES_set_encrypt_key((unsigned char*)key, 128, &aes) < 0)
    {
        return 0;
    }

    int len = getlen(str_in);

    AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_ENCRYPT);
    return 1;
}

 

解密:

/**********************************************************
函數名:aes_decrypt
參數:const char* str_in        --輸入
參數:unsigned char* key        --key
參數:unsigned char* out        --輸出
返回值:int                  --0失敗  1成功
說明:                --解密
***********************************************************/
int aes_decrypt(char* str_in, char* key, char* out)
{
    if (!str_in || !key || !out) return 0;
    unsigned char iv[AES_BLOCK_SIZE];//加密的初始化向量
    char tmpIV[] = "0123456789abcdef";
    for (int i = 0; i < 16; ++i)
        iv[i] = tmpIV[i];
   AES_KEY aes;
if (AES_set_decrypt_key((unsigned char*)key, 128, &aes) < 0) { return 0; } int len = getlen(str_in); AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_DECRYPT); return 1; }

 

 

問題:每次只能加密16個字節

查看源碼:

 

 

 

 


免責聲明!

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



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