OpenSSL AES對稱加密演算法使用詳解

2021-09-11 08:53:34 字數 1628 閱讀 9291

演算法:

aes加密演算法是根據「s盒」(如下圖所示)來對明文進行位元組替換的,這一點也就是說對於aes演算法來說其加密明文和密文大小是一樣的,對於具體的s盒的構造方法和aes演算法理論(手寫加密演算法)後面有時間再進行整理,這裡先解決專案的當務之急吧。

2.openssl -api講解:

設定加密解密key及秘鑰長度:

int aes_set_encrypt_key(const unsigned char *userkey, const int bits, aes_key *key);

int aes_set_decrypt_key(const unsigned char *userkey, const int bits, aes_key *key);

userkey:使用者自設定的初始密碼值,aes演算法根據此初始化值來進行後續s盒的生成;

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

key:aes_key物件指標;

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

void aes_encrypt(const unsigned char *in, unsigned char *out, const aes_key *key);

aes 加密,加密單個資料塊,in,out可以是同一記憶體區;

in: 需要加密的資料,每次加密長度是aes_block_size長度的資料,加密比較成的資料需要迴圈加密;

key:aes 金鑰;

void aes_decrypt(const unsigned char *in, unsigned char *out, const aes_key *key);

aes 解密,解密單個資料塊,in,out可以是同一記憶體區;

in: 需要解密的資料,既然加密是按aes_block_size長度來進行的(所謂的塊加密),那麼自然解密也是按此大小的塊來迴圈進行;

out: 解密後的資料;

key:aes 金鑰;

3.使用例項**:

#include#include#include#include#include#include#include #pragma comment(lib, "libcrypto.lib")

#pragma comment(lib, "libssl.lib")

int main()

//設定解密key及秘鑰長度

aes_set_decrypt_key((const unsigned char *)userkey, aes_block_size * 8, &key);

len = 0;

//迴圈解密

//每次輸入16位元組,輸出16位元組,如果不夠需要填充

while (len < aes_block_size * 3)

//解密後與元資料是否一致

if (memcmp(plain, data, aes_block_size * 3) == 0)

else

system("pause");

return 0;

}

對稱加密演算法 非對稱加密算

對稱加密演算法des,3des,aes 非對稱加密演算法rsa,dsa,ecc aes data encryption standard 資料加密標準,速度較快,適用於加密大量資料的場合。3des triple des 是基於des,對一塊資料用三個不同的金鑰進行三次加密,強度更高。非對稱加密演算法...

RSA 與 AES 加密演算法,對稱與非對稱加密演算法

客戶端 a,產生乙個 aes 金鑰 keya 對稱加密 然後,把 keya,通過公鑰 publickey 進行加密 只有 伺服器的 privatekey 才可以解密,得到 keya 然後,伺服器 和 客戶端 a,已經成功地 交換了 aes 金鑰 keya 之後,伺服器 和 客戶端 a的 資料通訊,都...

安卓中的對稱加密,非對稱加密,MD5加密的演算法

安卓中使用的加密演算法可以說有三種 對稱加密 非對稱加密,及md5加密。對稱加密又稱作私鑰加密。舉例 家裡大門開門和鎖門用的是同一把鑰匙 加密和解密使用相同的金鑰。金鑰 在加密演算法當中,將明文轉換為密文,或者密文轉換為明文的時候,需要用到的引數。分為公鑰和私鑰。常見的對稱加密演算法有 aes wi...