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的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流...