一、AES ECB 256 加密函数


/*
功能:进行AES加密,返回hex转成的字符串
输入参数:Plaintext:明文 长度是16的倍数Ciphertext:密文 长度是明文长度的两倍key:密钥.
*/
int AES256_encrypt( unsigned char *Plaintext,unsigned char *Ciphertext,signed char *userkey)
{//unsigned char md[16];char tmp[3] = {'\0'};int i=0,j=0;int len = strlen(Plaintext);AES_KEY key;if(len<=0)  //字符过小return -1; if((len%AES_BLOCK_SIZE) !=0) //字符不是16的整数倍 AES_BLOCK_SIZE = 16return -1;   AES_set_encrypt_key(userkey, 256, &key);  //解密密钥while(len>0){//AES_encrypt(Plaintext+j*AES_BLOCK_SIZE,Plaintext+j*AES_BLOCK_SIZE,&key);  //默认ecb加密 和下面函数是一样的AES_ecb_encrypt(Plaintext+j*AES_BLOCK_SIZE,Plaintext+j*AES_BLOCK_SIZE,&key,AES_ENCRYPT);for(i=0;i<AES_BLOCK_SIZE;i++){sprintf(tmp,"%2.2x",Plaintext[j*AES_BLOCK_SIZE + i]);strcat(Ciphertext,tmp);}len = len - AES_BLOCK_SIZE;j++;}}

二、AES ECB 256 解密函数

/*
功能:十六进制的字符串转成hex,
输入参数:in_data_ptr:输入数据  内存长度必须偶数in_data_len:必须是偶数out_data_ptr:输出十六进制,内存长度必须是in_data_len/2
*/
unsigned int hex_str_to_hex(unsigned char* in_data_ptr, unsigned int in_data_len,unsigned char* out_data_ptr )
{unsigned char* in_data = in_data_ptr;unsigned char* out_data = out_data_ptr;unsigned char  temp;unsigned int i;if(in_data_ptr == NULL || out_data_ptr == NULL){return 1;}for (i = 0; i < in_data_len; i += 2){temp = in_data[i] - '0';if (temp > 9) temp += '0' + 10 - 'a';//printf("%c(%x): %x\n", in[i], in[i], r);out_data[i / 2] = temp<< 4;temp = in_data[i + 1] - '0';if (temp > 9) temp += '0' + 10 - 'a';out_data[i / 2] += temp;//printf("%c(%x): %x <%x>\n", in[i+1], in[i+1], r, out[i/2]);}return 0;
}
/*
功能:进行AES解密,返回hex转成的字符串
输入参数:Plaintext:明文 长度是16的倍数Ciphertext:密文 长度是明文长度的两倍key:密钥.
*/
int AES256_decrypt( unsigned char *Plaintext,unsigned char *Ciphertext,signed char *userkey)
{char tmp[3] = {'\0'};int i=0,j=0;int len = (strlen(Ciphertext))/2;unsigned char *Ciphertext_hex = malloc(len);AES_KEY key;if(len<=0)  //字符过小return -1;  if((len%AES_BLOCK_SIZE) !=0) //字符不是16的整数倍return -1;    hex_str_to_hex(Ciphertext,strlen(Ciphertext),Ciphertext_hex);AES_set_decrypt_key(userkey, 256, &key);  //解密密钥while(len>0){//AES_decrypt(Plaintext+j*AES_BLOCK_SIZE,Plaintext+j*AES_BLOCK_SIZE,&key);  //默认ecb加密 和下面函数是一样的AES_ecb_encrypt(Ciphertext_hex+j*AES_BLOCK_SIZE,Plaintext+j*AES_BLOCK_SIZE,&key,AES_DECRYPT);j++;len = len - AES_BLOCK_SIZE;}}

三、代码测试

#include <openssl/aes.h>
#include <openssl/md5.h>
#include <openssl/sha.h>int main(int argc, char *argv[])
{char out_aes_str[64]={0};char out_aes_hex[33]={0};char temp[33] =  {"d560aa9c274a4724b60ffe82386fe2d1"};char userkey[33]={"05D8FF3839354B425720793900000000"};AES256_encrypt(temp,out_aes_str,userkey);printf("out_aes_str is\r\n%s\r\n",out_aes_str);AES256_decrypt(out_aes_hex,out_aes_str,userkey);printf("yuanwen out_aes_hex is\r\n%s\r\n",out_aes_hex);} 

Linux AES加密相关推荐

  1. java AES 加密和linux解密

    java AES 加密: package app;import static java.nio.charset.StandardCharsets.US_ASCII; import static jav ...

  2. java linux aes_java AES 加密和linux解密

    java AES 加密:package app; import static java.nio.charset.StandardCharsets.US_ASCII; import static jav ...

  3. Java AES加密,兼容Linux和Windows

    项目背景: 需要对下载链接的关键数据进行加密,解码: import java.io.UnsupportedEncodingException; import java.security.Invalid ...

  4. Python 的AES加密与解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现. python 在 Windows下使用A ...

  5. linux md5 加密字符串和文件方法

    linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...

  6. python aes加密 cbc_【转载】python AES CBC模式加密

    今天需要用到AES CBC模式加密,搜索了很久,终于加密成功,记录一下今天的理解. 首先要安装pycrypto库,不知道为什么在windows安装失败,在linux可以正常安装 这里有几点要注意,ke ...

  7. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

  8. python实现字母的加密和解密 字典_python实现AES加密与解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...

  9. python AES加密解密

    AES,是美国联邦政府采用的一种加密技术,AES有几个模式,其中CBC模式是公认的安全性最好的模式,被TLS所采用. 加密与解密双方需确定好key,key的长度可以是16位,24位,32位中的一个,分 ...

最新文章

  1. java 80端口_Java80端口占用异常解决方法
  2. python怎么读文件后删去空格以行为单位进行排序-python 大文件以行为单位读取方式比对...
  3. (转)彻底学通string.Format以及IFormattable,IFormatProvider,ICustomFormatter
  4. 写的很好!细数 Java 线程池的原理
  5. 反弹shell与正向shell的区别
  6. 位域 内存 字节序_C语言中的位域、字节序、比特序、大小端(转)
  7. Delphi IDE使用的一些主要技巧
  8. 【转】1.2SharePoint服务器端对象模型 之 对象模型概述(Part 2)
  9. 各大公司应聘电子类题目精选
  10. 资源放送丨《 Kubernetes Operator 开发范式》PPT视频
  11. 制作U盘启动的并可保持更改更新和设置的BT4最终版完全手册
  12. 实用的 Python 之 feedparser
  13. 电箱吉他与原声吉他的区别在哪里?初学者应该选哪个呢?
  14. python做乘法运算定律_乘法运算定律(四年级数学下册乘法运算定律)
  15. 如何编辑修改PDF,PDF怎么删除页眉页脚
  16. Python OS模块操作文件目录
  17. 二叉排序树、AVL树、红黑树、B树、B+树、Hash树、
  18. python 绘图如何画螺旋圈_如何画出python螺旋线
  19. 圣诞树拼图游戏unity制作
  20. Android 多国家语言适配

热门文章

  1. 未来不应成为当下的恐惧
  2. ubuntu16.04下使用YOLOV3训练自己做的VOC数据集(VOC数据集制作+模型训练步骤+训练参数解析和问题解决+训练日志可视化(loss、IOU)+模型测试(单张、摄像头、批量测试))
  3. 五分钟入门rust语言
  4. 20155201 实验三《Java面向对象程序设计》实验报告
  5. 做健身房没有健身管理系统行不行?
  6. Java开源技术分享:使用TopCode实现手指跟踪
  7. 【Unity3D日常开发】Unity3D中实现手指任意拖动物体
  8. java 图片合成到A4纸上
  9. Flink Native Kubernetes实战
  10. 动画自动滚动div/像素基础知识/手机端样式选择/