演算法:
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...