Openssl Aes加解密使用示例
Openssl Aes加解密使用示例
- Aes簡(jiǎn)介
- 設(shè)置Aes密鑰
- Aes算法CBC加解密
Aes簡(jiǎn)介
Aes是分組加密算法,主要基于塊加密,選取固定長(zhǎng)度的密鑰去加密明文中固定長(zhǎng)度的塊,生成的密文塊與明文塊長(zhǎng)度一樣。
AES加密模式:
Aes共五種加密模式,本文以cbc模式為列。
1.電碼本模式(Electronic Codebook Book (ECB)
2.密碼分組鏈接模式(Cipher Block Chaining (CBC))
3.計(jì)算器模式(Counter (CTR))
4.密碼反饋模式(Cipher FeedBack (CFB))
5.輸出反饋模式(Output FeedBack (OFB))
使用場(chǎng)景:
Aes加密主要使用于對(duì)數(shù)據(jù)加密后還需要通過(guò)密文解密出明文的場(chǎng)景,如無(wú)需解出明文的可使用安全性更高的非對(duì)稱(chēng)加密。
設(shè)置Aes密鑰
Aes對(duì)數(shù)據(jù)加密前需要先設(shè)置加密密鑰,加密密鑰的長(zhǎng)度決定了暴力破解的難度,如果系統(tǒng)內(nèi)存、性能允許,建議使用256 位以上長(zhǎng)度的密鑰進(jìn)行加密。對(duì)密文解密時(shí)需要設(shè)置同樣的密鑰解密。
通過(guò)AES_set_encrypt_key接口可以設(shè)置加密密鑰:
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key);userKey: 密鑰數(shù)值;
bits:密鑰長(zhǎng)度,以bit為單位,如果密鑰數(shù)字是16個(gè)字節(jié),則此參數(shù)值應(yīng)為128;
key: AES_KEY對(duì)象指針;
返回值: 0 成功, -1 userkey,key為空, -2: 密鑰長(zhǎng)度不是128,192,256;
通過(guò)AES_set_decrypt_key設(shè)置解密密鑰
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,AES_KEY *key);userKey: 密鑰數(shù)值;
bits:密鑰長(zhǎng)度,以bit為單位,如果密鑰數(shù)字是16個(gè)字節(jié),則此參數(shù)值應(yīng)為128;
key: AES_KEY對(duì)象指針;
返回值: 0 成功, -1 userkey,key為空, -2: 密鑰長(zhǎng)度不是128,192,256;
Aes算法CBC加解密
Aes每次加密的內(nèi)存塊是16個(gè)字節(jié),所以需要加密的內(nèi)存塊必須是16個(gè)字節(jié)的整數(shù)倍,若不是則需要進(jìn)行補(bǔ)齊。ivec、usrKey可指通過(guò)函數(shù)隨機(jī)生成后保存,也可以直接指定。
加密接口
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);使用代碼實(shí)例:
static unsigned char key[AES_BLOCK_SIZE*2] = "1wradfr4e3fefefad4545454h6thrsf";int aes256_encrypt(char* str_in, char* out) {int i;int len;AES_KEY aes;unsigned char iv[AES_BLOCK_SIZE] = {0};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){return 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) {int i;int len;AES_KEY aes;unsigned char iv[AES_BLOCK_SIZE] = {0};if (!str_in || !out)return -1;len = strlen(str_in);//確保里面的內(nèi)容加密解密一樣for (i = 0; i < 16; ++i) iv[i] = i+32;if (AES_set_decrypt_key((unsigned char*)key, 256, &aes) < 0){return -1;}AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_DECRYPT);return 0; }總結(jié)
以上是生活随笔為你收集整理的Openssl Aes加解密使用示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: adb remount失败的一种解决办法
- 下一篇: python怎样算入门_python初学