aes加密字符串 openssl_openssl之aes对称加密

AES:密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 Rijndael加密法。

对称加密:用同一个密码  加密/解密  文件。

使用openssl中的两函数加密解密  (默认只能加密16字节)

AES_set_encrypt_key(unsigned char*)key, int, &AES_KEY)  --  加密密钥

AES_set_decrypt_key(unsigned char*)key, int, &AES_KEY)  --  解密密钥

AES_cbc_encrypt(unsigned char*)str_in, (unsigned char*)out, int len, &AES_KE Y, unsigned char*,  AES_DECRYPT)

#include "openssl/aes.h"unsignedcharkey[AES_BLOCK_SIZE];

unsignedchariv[AES_BLOCK_SIZE];#define AES_BITS 10240

#define MSG_LEN 10240

/**********************************************************

函数名:getlen

参数:char *result --字符串地址

返回值:int --字符串长度

说明: --获取字符串长度

***********************************************************/

int getlen(char *result){int i = 0;while (result[i] != '\0'){

i++;

}returni;

}

加密:

/**********************************************************

函数名:aes_encrypt

参数:const char* str_in --输入字符

参数:unsigned char* key --key

参数:unsigned char* out --输出字符

返回值:int --0失败 1成功

说明:加密

***********************************************************/

int aes_encrypt(char* str_in, char* key, char* out)

{if (!str_in || !key || !out) return 0;//加密的初始化向量

unsigned chariv[AES_BLOCK_SIZE];//16位密码

char tmpIV[] = "0123456789abcdef";for (int i = 0; i < 16; ++i)

iv[i]=tmpIV[i];

AES_KEY aes;if (AES_set_encrypt_key((unsigned char*)key, 128, &aes) < 0)

{return 0;

}int len =getlen(str_in);

AES_cbc_encrypt((unsignedchar*)str_in, (unsigned char*)out, len, &aes, iv, AES_ENCRYPT);return 1;

}

解密:

/**********************************************************

函数名:aes_decrypt

参数:const char* str_in --输入

参数:unsigned char* key --key

参数:unsigned char* out --输出

返回值:int       --0失败 1成功

说明:                --解密

***********************************************************/

int aes_decrypt(char* str_in, char* key, char* out)

{if (!str_in || !key || !out) return 0;

unsignedchar iv[AES_BLOCK_SIZE];//加密的初始化向量

char tmpIV[] = "0123456789abcdef";for (int i = 0; i < 16; ++i)

iv[i]=tmpIV[i];

AES_KEY aes;if (AES_set_decrypt_key((unsigned char*)key, 128, &aes) < 0)

{return 0;

}int len =getlen(str_in);

AES_cbc_encrypt((unsignedchar*)str_in, (unsigned char*)out, len, &aes, iv, AES_DECRYPT);return 1;

}

问题:每次只能加密16个字节

查看源码:

9217f954521e4ab558f8562208bb9fdc.png

a50e39b0b9f988b213bc15a7ec6b2bfb.png

3c68b4a063a13d4a9e09e04b0492300b.png

c211cde59bf5022d157c10b6372b36df.png

9bf735cdd050fd7bcd4f7924db95fda3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值