C语言 文件操作12--文件加密
//文件加密解密
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include"des.h" //加密分为对称加密和非对称加密
//对称加密:加密的密钥和解密的密钥一样,对称的特点是--加密速度快,用于大文件加密
//常用的加密算法:des 3des ssff33 sm6系列 //非对称加密:加密的密钥和解密的密钥不一样,非对称的特点是--加密速度慢,但加密强度高
//常用的加密算法:rsa1024 rsa2048 //对称加密是一种分组加密,每个分组的长度本质上是密钥的长度,des算法密钥是8个字节,或者16个字节,每组是8个字节或者16字节 当明文的长度正好是8的整数倍的时候加密没有问题
//但是明文的长度不是8的整数倍就要采用补码的形式了
//DesEnc这种加密算法是这么设计的 当明文的长度不是8的整数倍的时候,缺几补几
//例如:明文(sdefgtyheg12drg)长度15,那么再补1个字节就是8的整数倍,那么就在补一个1,形成补码明文(sdefgtyheg12drg1),再进行加密,解密的时候自动去掉末尾的数字表示的长度-1,得到正确的明文
//明文(sdefgtyheg12d)长度13,那么再补3个字节就是8的整数倍,那么就在补三个3,形成补码明文(sdefgtyheg12d333),再进行加密.......解密的时候自动去掉末尾的数字表示的长度-3,得到正确的明文
//明文(sdefgtyh4444)长度12,那么再补4个字节就是8的整数倍,那么就在补四个个4,形成补码明文(sdefgtyh44444444),再进行加密.......解密的时候自动去掉末尾的数字表示的长度-4,得到正确的明文
//明文(sessssse)长度8,本身已经是8的整数倍了 但是DesEnc是一种补码加密,必须要补码,所以需要补上8个0,形成补码明文(sessssse00000000),再进行加密.......解密的时候发现末尾数字是0,那么直接将数组长度减去8,得到正确的明文
//注意:DesEnc加密补码只是在整个文件末尾补码,并不是每个分组都进行补码
//DesEnc_raw()这种加密算法只针对与8的整数倍大小的数据,原理也是分组加密,但是加密的时候不用补码 //所以DesEnc_raw()函数加密之后的密文长度和明文长度相同,但是DesEnc(0函数加密之后的密文长度至少比明文长度多1个字节,至多比明文长度多8个字节,所有准备的密文数组要相应的大一点 //DesEnc算法加密
int DesEncfile(){
//定义字符数组
unsigned char buf8[] = "";
//定义明文长度
int plainlen = ;
//定义密文数组
unsigned char bufcrypt[] = { };
//定义密文长度
int cryptlen = ;
//开始加密明文
int rest = DesEnc(buf8, plainlen, bufcrypt, &cryptlen);
if (rest != )
{
printf("加密失败!\n");
return ;
}
else{
printf("加密成功!\n");
}
//解密文件
//定义字符数组
//之所以定义数组长度是10,是为了在末尾加上一个'\0'方便打印
unsigned char buf82[] = { };
//定义明文长度
int plainlen2 = ;
int rest2 = DesDec(bufcrypt, cryptlen, buf82, &plainlen2);
if (rest2 != )
{
printf("解密失败!\n");
return ;
}
else{
printf("解密成功!,明文是%s\n", buf82);
}
//比较解密之后的明文是否和原来的明文相同
//memcmp()比较buf8和buf82在plainlen2长度上的内容是否相同
if (memcmp(buf8, buf82, plainlen2) == )
{
printf("两者内容相同!\n");
}
return ;
} //DesEnc_raw算法加密
int DesEnc_rawfile(){
//定义字符数组
unsigned char buf8[] = "";
//定义明文长度
int plainlen = ;
//定义密文数组
unsigned char bufcrypt[] = { };
//定义密文长度
int cryptlen = ;
//开始加密明文
//DesEnc_raw用来加密8的整数倍大小的数据
//DesEnc_raw()函数详解:DesEnc_raw()函数是用来加密正好是8的整数倍的数据,
//加密后,密文和明文的长度一样
//解密DesEnc_raw()所用的函数是DesDec_raw()
int rest = DesEnc_raw(buf8, plainlen, bufcrypt, &cryptlen);
if (rest != )
{
printf("加密失败!\n");
return ;
}
else{
printf("加密成功!\n");
}
//解密文件
//定义字符数组
unsigned char buf82[] = { };
//定义明文长度
int plainlen2 = ;
int rest2 = DesDec_raw(bufcrypt, cryptlen, buf82, &plainlen2);
if (rest2 != )
{
printf("解密失败!\n");
return ;
}
else{
printf("解密成功!,明文是%s\n", buf82);
}
//比较解密之后的明文是否和原来的明文相同
//memcmp()比较buf8和buf82在plainlen2长度上的内容是否相同
if (memcmp(buf8, buf82, plainlen2) == )
{
printf("两者内容相同!\n");
}
return ;
} void main()
{
//DesEncfile();
DesEnc_rawfile();
system("pause");
}
C语言 文件操作12--文件加密的更多相关文章
- Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录
Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...
- C++ 学习笔记之——文件操作和文件流
1. 文件的概念 对于用户来说,常用到的文件有两大类:程序文件和数据文件.而根据文件中数据的组织方式,则可以将文件分为 ASCII 文件和二进制文件. ASCII 文件,又称字符文件或者文本文件,它的 ...
- Python文件操作:文件的打开关闭读取写入
Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...
- C语言应用操作之文件
文件是C语言中德中的重点,小编在学习C语言基础知识的时候,大多数的输入输出操作是在屏幕上进行的,现在总算在文件学习上感觉到高大上的样纸.在以前数据量很小时,我们通常将信息从键盘在屏幕上进行输入输出的, ...
- 总结文件操作函数-文件夹(三)-C语言
获取.改变当前文件夹: 原型为: #include <unistd.h> //头文件 char *getcwd(char *buf, size_t size); //获取当前文件夹.相 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- php课程---文件操作及文件上传的代码总结
php里面文件包含目录和文件两种 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- AIR文件操作:使用文件对象操作文件和目录 .
来源:http://blog.csdn.net/zdingxin/article/details/6635376 在AIR中可以方便的对本地文件操作,不过上次做了个项目,发现还是有不少不方便的地方,比 ...
- Python之文件操作:文件的读写
一.open函数:对文件读写之前,需要先打开文件,获取文件句柄 注意:open() file() 尽量使用open(),Python3以后不支持file()了 1.open(file_name[,ac ...
- linux常用命令之------文件操作、文件查看、权限、打包压缩
1.一般公司把linux作为自己的应用服务器,将应用和服务器部署在上面 2.测试一般用来打包.压缩.查日志,写一个简单的shell 获得linux服务器的方式 a:网上租一台云服务器 b:安装vmwa ...
随机推荐
- 安装和配置tomcat服务器
本文主要介绍一下tomcat服务器的安装和配置 1.获取tomcat tomcat服务器可以到它的官方网站(http://tomcat.apache.org)上下载 2.安装tomcat 具体步骤: ...
- Xcode注释插件 VVDocumenter 升级Xcode6.x 失效的解决办法
失效的原因其实是因为在插件的uuid列表中缺少自己的uuid,解决办法如下; 1,打开终端 输入命令: defaults read /Applications/Xcode.app/Contents/I ...
- 如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)
前言 iOS9系统下 为了我司APP的兼容性问题 特意把手上的iOS Mac XCode都升级到了最新的beta版 然后发现iOS9的多任务管理器风格大变 变成了下面这种样子 我忽然想起来之前的文章提 ...
- 我的android学习经历11
让TextViews实现跑马灯效果 有时候用文本控件时,文本只能在一行显示,而且文本很长的话,后面的文本就会隐藏 一.假如你只需要一个TextView,那个可以添加三个属性实现跑马灯效果,也就是让文字 ...
- Java基础之子类父类属性覆盖
当java的子类和父类具有相同名字的属性时,到底java是怎么处理的. 先看代码: package com.joyfulmath.study.field; public class Person { ...
- 《HTML5与CSS3实例教程》
<HTML5与CSS3实例教程> 基本信息 作者: (美)Brian P. Hogan 译者: 卢俊祥 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:97871153634 ...
- cmd常用命令 和 sql server相关基础
在Java开发中 ms sql server 接触算是比较少的,本文记录一些ms sql server的基础知识. 1. 为表字段增加索引:create index user_openid on us ...
- 烂泥:KVM虚拟机随KVM服务器的启动而启动
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要使KVM虚拟机随KVM服务器的启动而启动,我们所需要做的工作很少.只需要把KVM虚拟机的XML配置文件做一个软连接到/etc/libvirt/qemu ...
- windows 下安装nginx
1.首先去官网下载 nginxWindows版本,官网下载:http://nginx.org/en/download.html 选择最新版本,下载到软件包后,解压文件包到指定目录,例如我的目录是D:\ ...
- 边工作边刷题:70天一遍leetcode: day 73
Read N Characters Given Read4 I/II 要点:这题的要点就是搞清楚几个变量的内在逻辑:只有buffer是整4 bytes的.而client要读的bytes(需求)和实际上 ...