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. java需要了解和学习的技能

    一:系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节.扫清主要难点的技术人员.主要着眼于系统的“技术实现”.因此他/她应该是特定的开发平台.语言.工具的大师 ...

  2. 新建web工程

    1.选择新建Dynamic  Web Project 2.选择服务器和版本(2.5) 3.WebContend目录下新建一个html文件 4.运行 工程的目录结构: WEB-INF目录时受保护的,不能 ...

  3. 即时聊天APP(二) - MainActivity

    主活动包含三个Fragment,分别是会话.联系人和设置,初始布局隐藏所有碎片,然后把应该显示的显示出来: //隐藏所有Fragment private void hideAll(){ Fragmen ...

  4. NPOI导出数值格式设置(我是保留四位小数,不足补0)

    看了网上好多帖子,都是保留两位小数的,写法是: HSSFDataFormat.GetBuiltinFormat("0.00"); 于是想四位小数,就是多加两个00,变成: HSSF ...

  5. [Python] 09 - Multi-processing

    前言 资源 Ref: Python3 多线程 Ref: Python3之多进程       # python中的多线程无法利用多核优势 更多的提高效率的策略,请参见:[Pandas] 01 - A g ...

  6. [转载 ]五种常见的 PHP 设计模式

    五种常见的 PHP 设计模式 策略模式 策略模式是对象的行为模式,用意是对一组算法的封装.动态的选择需要的算法并使用. 策略模式指的是程序中涉及决策控制的一种模式.策略模式功能非常强大,因为这个设计模 ...

  7. JavaScript DOM 编程艺术

    最近把JavaScript DOM 编程艺术这本书看完了,觉得这本书很好 深入浅出地展示了渐进增强.平稳退化.结构和样式分离等编程思想,我对书中重要的知识进行了梳理总结. 一.网页 二.JavaScr ...

  8. Salem and Sticks-萨鲁曼的棍子 CodeForce#1105A 暴力

    题目链接:Salem and Sticks 题目原文 Salem gave you 

  9. JAVASE知识点总结(二)

    第十三章:多态  一.instanceof 判断一个类是否是指定的类 真则返回true 假则返回false.  二.字段没有多态,只有方法有多态,字段前面是的什么类型,字段就调用谁的,在编译时就已经确 ...

  10. idea创建javaweb原生项目

    使用idea创建javaweb项目 idea还是写框架项目比较爽,原生的javaweb项目不是特别方便,这篇文章就是记录一下创建的过程 图较多注意流量 选择创建web项目 配置tomcat服务器 配置 ...