AES分組加密簡介
1、首先應該明白AES是基於數據塊的加密方式,也就是說,每次處理的數據是一塊(16字節),當數據不是16字節的倍數時填充,這就是所謂的分組密碼(區別於基於比特位的流密碼),16字節是分組長度。
2、分組加密的幾種方式
ECB:是一種基礎的加密方式,密文被分割成分組長度相等的塊(不足補齊),然后單獨一個個加密,一個個輸出組成密文。
CBC:是一種循環模式,前一個分組的密文和當前分組的明文異或操作后再加密,這樣做的目的是增強破解難度。
CFB/OFB實際上是一種反饋模式,目的也是增強破解的難度。
ECB和CBC的加密結果是不一樣的,兩者的模式不同,而且CBC會在第一個密碼塊運算時加入一個初始化向量。
3、兩個api
void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc);
AES加密/解密單個數據塊,ECB模式
in: 需要加密/解密的數據;
out: 計算后輸出的數據;
key:密鑰
enc: AES_ENCRYPT 代表加密, AES_DECRYPT代表解密;
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc);
AES加密/解密單個數據塊,CBC模式
in: 需要加密/解密的數據;
out: 計算后輸出的數據;
length: 數據長度
key:密鑰
ivec: 初始向量
enc: AES_ENCRYPT 代表加密, AES_DECRYPT代表解密;
原文
http://bbs.csdn.net/topics/330033279
OpenSSL 之 Command & API
http://hi.baidu.com/orxor/item/e0b4bc69774a4b0da0cf0f2b
http://bbs.csdn.net/topics/390448993
Openssl AES 總結函數的參數含義
http://blog.csdn.net/sunspider107/article/details/7375816
https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation