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"

unsigned char key[AES_BLOCK_SIZE];
unsigned char iv[AES_BLOCK_SIZE]; #define AES_BITS 10240
#define MSG_LEN 10240 /**********************************************************
函数名:getlen
参数:char *result --字符串地址
返回值:int --字符串长度
说明: --获取字符串长度
***********************************************************/
int getlen(char *result){
int i = ;
while (result[i] != '\0'){
i++;
}
return i;
}

加密:

/**********************************************************
函数名: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 ; //加密的初始化向量
unsigned char iv[AES_BLOCK_SIZE]; //16位密码
char tmpIV[] = "0123456789abcdef";
for (int i = ; i < ; ++i)
iv[i] = tmpIV[i]; AES_KEY aes;
if (AES_set_encrypt_key((unsigned char*)key, , &aes) < )
{
return ;
} int len = getlen(str_in); AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_ENCRYPT);
return ;
}

解密:

/**********************************************************
函数名: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 ;
unsigned char iv[AES_BLOCK_SIZE];//加密的初始化向量
char tmpIV[] = "0123456789abcdef";
for (int i = ; i < ; ++i)
iv[i] = tmpIV[i];
  
AES_KEY aes;
if (AES_set_decrypt_key((unsigned char*)key, , &aes) < )
{
return ;
} int len = getlen(str_in); AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_DECRYPT);
return ;
}

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

查看源码:

openssl之aes对称加密的更多相关文章

  1. AES对称加密和解密

    package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...

  2. AES对称加密

    import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...

  3. java的AES对称加密和解密,有偏移量

    import java.math.BigDecimal; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; i ...

  4. AES对称加密和解密(转)

    AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

  5. 正确使用AES对称加密

    正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到 ...

  6. JAVA中AES对称加密和解密

    AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

  7. AES对称加密解密类

    import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...

  8. linux以下C 利用openssl的AES库加密,解密

    OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是所有支持或者是部分支持. 返回值:"aes(full)" ...

  9. openssl 下的对称加密和非对称加密

    对称加密: 在加密和解密过程中使用相同的密钥, 或是两个可以简单地相互推算的密钥的加密算法. 非对称加密: 也称为公开加密, 它需要一个密钥对, 一个是公钥, 一个是私钥, 一个负责加密, 一个负责解 ...

随机推荐

  1. springboot jsp,过滤器,拦截器

    springboot使用jsp,过滤器,拦截器(拦截器与过滤器区别重点) jsp使用配置 一 创建springboot项目在maven中暂时只添加两个Dependencies :devtools(热部 ...

  2. 深入理解Three.js中正交摄像机OrthographicCamera

    前言 在深入理解Three.js中透视投影照相机PerspectiveCamera那篇文章中讲解了透视投影摄像机的工作原理以及对应一些参数的解答,那篇文章中也说了会单独讲解Three.js中另一种常用 ...

  3. 解决mysql不能在查询A表的同时,更新A表的问题

    方法: 运用中间表 UPDATE 表名 SET 字段名 = '' WHERE id in (SELECT a.id FROM (SELECT id FROM 表名 WHERE ISNULL(字段名)) ...

  4. 使用file_get_contents() 发送GET、POST请求

    服务器端执行HTTP请求,大家经常使用的就是CURL,curl工具的确是很好的数据文件传输工具,那么除此之外还有其他的工具能实现这个功能吗? 现在为你介绍一个很常见的工具 file_get_conte ...

  5. linux下安装node.js时npm无法使用

    安装node.js 10.15.1版本时,安装完在node的安装目录下执行./node -v查看node版本,成功则表示node已安装成功 [root@localhost bin]# ./node - ...

  6. jenkins自动化部署项目3 --设置用户

    我直接设置的admin ,jenkins可以新建多个用户,并赋予不同的权限(TODO) 等后续需要严格规范操作人的时候再补充

  7. 品Spring:SpringBoot和Spring到底有没有本质的不同?

    现在的Spring相关开发都是基于SpringBoot的. 最后在打包时可以把所有依赖的jar包都打进去,构成一个独立的可执行的jar包.如下图13: 使用java -jar命令就可以运行这个独立的j ...

  8. OpenGL在ubuntu下的成功配置

    sudo apt-get update sudo apt-get install build-essential sudo apt-get install libgl1-mesa-dev sudo a ...

  9. linux初学者小记

    a开头的小命令 alias命令 # echo=' - - - ' > /sys/class/scsi_host/host0/scan这条命令是咱们在给虚拟机装了一块新的硬盘后,在不关机的前提下扫 ...

  10. selenium-04-验证码问题

    对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法 ...