Openssl aes加解密例程 更进一步
原文链接: http://blog.csdn.net/itmes/article/details/7718427
前面我们用openssl的aes256对称加密算法对16个字节的内存块进行了的加解密运算测试,现在更进一步,对指定大小的内存块进行加解密运算。
首先明确一下aes是分组加密算法,且每次加密的内存块是16个字节,所以,我们需要加密的内存块必须是16个字节的整数倍,若不是,则需要进行补齐。
常见的对称加解密算法中rc2,rc4都是流加密,也就是以字节为单位进行加解密,而aes,des,3des,idea,blowfish,towfish,这些都是分组加密,都要求被加密的数据块进行字节对齐。
对于大于16个字节的内存块进行加密运算无非就是循环调用16字节加密运算。
参考以下例程:
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/aes.h>
#pragma comment(lib,"libeay32.lib")
int main(int argc, char **argv)
{
unsigned char buf[512];
unsigned char buf2[512];
unsigned char buf3[512];
unsigned char aes_keybuf[32];
memset(buf,1,sizeof(buf));
memset(buf,0,sizeof(buf2));
memset(buf,0,sizeof(buf3));
memset(aes_keybuf,0,sizeof(aes_keybuf));
AES_KEY aeskey;
AES_set_encrypt_key(aes_keybuf,256,&aeskey);
for(int i=0;i<sizeof(buf);i+=16)
AES_encrypt(buf+i,buf2+i,&aeskey);
AES_set_decrypt_key(aes_keybuf,256,&aeskey);
for(int i=0;i<sizeof(buf);i+=16)
AES_decrypt(buf2+i,buf3+i,&aeskey);
if(memcmp(buf,buf3,sizeof(buf))==0)
printf("test success\r\n");
else
printf("test fail\r\n");
}
这里的例程实际上是使用AES加密算法的ECB模式,另外还有CBC,CFB,OFB三种模式,简单的说,后面三种模式实际上是让上一个16字节的数据块加密的结果参与下一个16字节数据块加密运算,所以采用ECB模式进行加密时对内容相同的数据块加密的结果是相同的,采用CBC,CFB,OFB三种模式三种模式时加密的结果不光与源数据块内容相关,还跟加密的顺序有关。
最后再提一点,采用分组加密算法的时候,由于加密数据的最小单位是分组的大小,如aes的16个字节,des的8个字节,在加密文件时需要进行字节补齐,所以加密文件的结果可能会和原始文件一样大或者稍大于原始文件。在进行解密运算时,需要在解密后把补齐的字节再去除掉,才能够真正还原原始文件。
Openssl aes加解密例程 更进一步的更多相关文章
- Openssl aes加解密例程
原文链接: http://blog.csdn.net/itmes/article/details/7714854 假设我们已经下载了 openssl的源码,并成功编译,设置好了编程环境. 我们现在来看 ...
- OpenSSL aes加解密实例+base64编解码
OpenSSL aes加解密简单实例+base64编解码 #include <stdio.h> #include <string.h> #include <memory. ...
- openssl - rsa加解密例程
原文链接: http://www.cnblogs.com/cswuyg/p/3187462.html openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加 ...
- AES加解密算法Qt实现
[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...
- DES,AeS加解密,MD5,SHA加密
1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...
- c# Aes加解密和对象序列化
aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...
- Java、C#双语版配套AES加解密示例
这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...
- aes加解密 Illegal key size
做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前 ...
- C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密
前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...
随机推荐
- Swift语言精要-闭包(Closure)
闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生. 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包. ...
- 牛客网-《剑指offer》-数值的整数次方[快速幂运算]
题目:http://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00 /** * 1.全面考察指数的正负.底数是否为零等情况. ...
- CSS 之 伪类及伪元素
伪类和伪元素用起来非常的方便,在查阅资料及测试后整理下来. 一.伪类 CSS 伪类用于向某些选择器添加特殊的效果.伪类对元素进行分类是基于特征(characteristics)而不是它们的名字.属性或 ...
- 【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)
之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...
- SQL到NoSQL概览性总结之一 数据库应用场景选型
数据库类型与实例 适合场景 不适合场景 场景举例 关系数据库 基于集合理论,具有行和列的二维表,严格使用类型 开源MySQL/MariaDB, PostgreSQL 商业:Oracle,DB2,SQL ...
- hadoop 文件合并
来自:http://blog.csdn.net/dandingyy/article/details/7490046 众所周知,Hadoop对处理单个大文件比处理多个小文件更有效率,另外单个文件也非常占 ...
- java 加密
加密.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密. 双向加密大体意思就是明文加密后形成密文,能够通过算法还原成明文. 单向加密仅仅是对信息进行了摘要计算,不能通过算法生成明文. ...
- 使用dd命令制作U盘启动盘wodim刻录光盘cd dvd
首先格式化U盘:使用fdisk -l 查看U盘到挂载点,如我的为/dev/sdb1.卸载U盘,执行格式化命令:mkfs.vfat /dev/sdb1 然后重新挂载U盘,开始制作启动盘: 1.# dd ...
- Linux内存管理(转)
一.内核空间 1.1 页 页(page)是内核的内存管理基本单位. ==> linux/mm_types.h struct page { page_flags_t flags; 页标志符 ato ...
- Java DES 加解密("DES/CBC/PKCS5Padding")
/** * DES加密 * * @param data 加密数据 * @param key 密钥 * @return 返回加密后的数据 */ public static byte[] desEncry ...