OpenSSL提供了AES加解密算法的API

OpenSSL提供了AES加解密算法的API


const char *AES_options(void);

AES算法狀態,是全部支持或者是部分支持。

返回值:“aes(full)” 或者"aes(partial)"


int AES_set_encrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key);

設定加密用的Key;

userKey: 密鑰數值;

bits:密鑰長度,以bit爲單位,如果密鑰數字是16個字節,則此參數值應爲128;

key: AES_KEY對象指針;

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


int AES_set_decrypt_key(const unsigned char *userKey, const int bits,  AES_KEY *key);

設定解密用的Key;

userKey: 密鑰數值;

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: 需要加密的數據;

out: 加密後的數據;

key:AES 密鑰;


void AES_decrypt(const unsigned char *in, unsigned char *out,const AES_KEY *key);

AES 解密,解密單個數據塊,in,out可以是同一內存區;

in: 需要解密的數據;

out: 解密後的數據;

key:AES 密鑰;


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代表解密;


void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
    size_t length, const AES_KEY *key,
    unsigned char *ivec, int *num, const int enc);
AES CFB128位模式加密/解密,輸入輸出數據區可以重疊;
in: 需要加密/解密的數據;
out: 計算後輸出的數據;
length: 數據長度;
key: 密鑰;
ivec: 初始化向量
num: 輸出參數,計算狀態,多少個CFB數據塊
enc: 計算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
    
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
    size_t length, const AES_KEY *key,
    unsigned char *ivec, int *num, const int enc);
AES CFB1位模式加密/解密,輸入輸出數據區可以重疊;
in: 需要加密/解密的數據;
out: 計算後輸出的數據;
length: 數據長度;
key: 密鑰;
ivec: 初始化向量
num: 輸出參數,計算狀態,多少個CFB數據塊
enc: 計算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
    
    
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
    size_t length, const AES_KEY *key,
    unsigned char *ivec, int *num, const int enc);
AES CFB8位模式加密/解密,輸入輸出數據區可以重疊;
in: 需要加密/解密的數據;
out: 計算後輸出的數據;
length: 數據長度;
key: 密鑰;
ivec: 初始化向量
num: 輸出參數,計算狀態,多少個CFB數據塊
enc: 計算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT

    
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
    size_t length, const AES_KEY *key,
    unsigned char *ivec, int *num);
AES OFB128位模式加密/解密,輸入輸出數據區可以重疊;
in: 需要加密/解密的數據;
out: 計算後輸出的數據;
length: 數據長度;
key: 密鑰;
ivec: 初始化向量
num: 輸出參數,計算狀態,多少個CFB數據塊
enc: 計算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT

        
    
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
    size_t length, const AES_KEY *key,
    unsigned char ivec[AES_BLOCK_SIZE],
    unsigned char ecount_buf[AES_BLOCK_SIZE],
    unsigned int *num);
AES CTR128位模式加密/解密,輸入輸出數據區可以重疊;
in: 需要加密/解密的數據;
out: 計算後輸出的數據;
length: 數據長度;
key: 密鑰;
ivec: 初始化向量
ecount_buf: 輸出參加,加密的次數,在第一次調用此函數時,需要初始化爲0
num: 輸出參數,計算狀態,多少個CFB數據塊,在第一次調用此函數時,需要初始化爲0
enc: 計算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT



void AES_ige_encrypt(const unsigned char *in, unsigned char *out,
             size_t length, const AES_KEY *key,
             unsigned char *ivec, const int enc);
AES 加密/解密,輸入輸出數據區可以重疊,初始化向量是加密數據塊的2倍,加密前用前半部分做一次異或,加密後用後半部分做一次異或;
in: 需要加密/解密的數據;
out: 計算後輸出的數據;
length: 數據長度;
key: 密鑰;
ivec: 初始化向量
enc: 計算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
    
                 

void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
            size_t length, const AES_KEY *key,
            const AES_KEY *key2, const unsigned char *ivec,
            const int enc);
AES 加密/解密,輸入輸出數據區可以重疊,初始化向量是加密數據塊的4倍,加密前用第一部分做一次異或,加密後用第二部分做一次異或;
最後一個加密數據塊,加密前用第三部分異或,加密後用第四部分異或;
in: 需要加密/解密的數據;
out: 計算後輸出的數據;
length: 數據長度;
key: 密鑰;
ivec: 初始化向量
enc: 計算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT           

int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
        unsigned char *out,
        const unsigned char *in, unsigned int inlen)

用AES算法對明文key數據加密

key: AES Key,用於加密密鑰數據

iv: 初始化向量

out: 加密後的密鑰數據

in: 密鑰數據

inlen: 密鑰數據長度

返回值: 1: 成功, 0: 失敗


int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
        unsigned char *out,
        const unsigned char *in, unsigned int inlen)

用AES算法對明文key數據加密

key: AES Key,用於加密密鑰數據

iv: 初始化向量

out: 加密後的密鑰數據

in: 密鑰數據

inlen: 密鑰數據長度

返回值: 1: 成功, 0: 失敗



原地址: http://blog.csdn.net/sunspider107/article/details/7375816  此blog對Openssl有較多的介紹多看




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章