Openssl Aes加解密使用示例

2021-09-23 22:08:44 字數 2713 閱讀 2157

aes是分組加密演算法,主要基於塊加密,選取固定長度的金鑰去加密明文中固定長度的塊,生成的密文塊與明文塊長度一樣。

aes加密模式:

aes共五種加密模式,本文以cbc模式為列。

1.電碼本模式(electronic codebook book (ecb)

2.密碼分組鏈結模式(cipher block chaining (cbc))

3.計算器模式(counter (ctr))

4.密碼反饋模式(cipher feedback (cfb))

5.輸出反饋模式(output feedback (ofb))

使用場景:

aes加密主要使用於對資料加密後還需要通過密文解密出明文的場景,如無需解出明文的可使用安全性更高的非對稱加密。

aes對資料加密前需要先設定加密金鑰,加密金鑰的長度決定了暴力破解的難度,如果系統記憶體、效能允許,建議使用256 位以上長度的金鑰進行加密。對密文解密時需要設定同樣的金鑰解密。

通過aes_set_encrypt_key介面可以設定加密金鑰:

int aes_set_encrypt_key(const unsigned char *userkey, const int bits,

aes_key *key);

userkey: 金鑰數值;

bits:金鑰長度,以bit為單位,如果金鑰數字是16個位元組,則此引數值應為128;

key: aes_key物件指標;

返回值: 0 成功, -1 userkey,key為空, -2: 金鑰長度不是128,192,256;

通過aes_set_decrypt_key設定解密金鑰

int aes_set_decrypt_key(const unsigned char *userkey, const int bits,

aes_key *key);

userkey: 金鑰數值;

bits:金鑰長度,以bit為單位,如果金鑰數字是16個位元組,則此引數值應為128;

key: aes_key物件指標;

返回值: 0 成功, -1 userkey,key為空, -2: 金鑰長度不是128,192,256;

aes每次加密的記憶體塊是16個位元組,所以需要加密的記憶體塊必須是16個位元組的整數倍,若不是則需要進行補齊。ivec、usrkey可指通過函式隨機生成後儲存,也可以直接指定。

加密介面

void aes_cbc_encrypt(const unsigned char *in, unsigned char *out,

size_t length, const aes_key *key,

unsigned char *ivec, const int enc);

解密介面

void aes_cbc_encrypt(const unsigned char *in, unsigned char *out,

size_t length, const aes_key *key,

unsigned char *ivec, const int enc);

使用**例項:

static unsigned char key[aes_block_size*2] = "1wradfr4e3fefefad4545454h6thrsf";

int aes256_encrypt(char* str_in, char* out)

; if (!str_in || !out)

return 0;

len = strlen(str_in);

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

iv[i] = i+32;

if (aes_set_encrypt_key((unsigned char*)key, 256, &aes) < 0)

aes_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, aes_encrypt);

return 1;

}int aes256_decrypt(char* str_in, char* out)

;

if (!str_in || !out)

return -1;

len = strlen(str_in);

//確保裡面的內容加密解密一樣

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

iv[i] = i+32;

if (aes_set_decrypt_key((unsigned char*)key, 256, &aes) < 0)

aes_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, aes_decrypt);

return 0;

}

Java中RSA非對稱金鑰加解密使用

一 簡介 rsa加密演算法是最常用的非對稱加密演算法,cfca在證書服務中離不了它。rsa是第乙個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定rsa的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流...

Java中RSA非對稱金鑰加解密使用示例

一 簡介 rsa加密演算法是最常用的非對稱加密演算法,cfca在證書服務中離不了它。rsa是第乙個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定rsa的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流...

Java中RSA非對稱金鑰加解密使用示例

一 簡介 rsa加密演算法是最常用的非對稱加密演算法,cfca在證書服務中離不了它。rsa是第乙個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定rsa的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流...