//文件加密解密
#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--文件加密的更多相关文章

  1. Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录

    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...

  2. C++ 学习笔记之——文件操作和文件流

    1. 文件的概念 对于用户来说,常用到的文件有两大类:程序文件和数据文件.而根据文件中数据的组织方式,则可以将文件分为 ASCII 文件和二进制文件. ASCII 文件,又称字符文件或者文本文件,它的 ...

  3. Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  4. C语言应用操作之文件

    文件是C语言中德中的重点,小编在学习C语言基础知识的时候,大多数的输入输出操作是在屏幕上进行的,现在总算在文件学习上感觉到高大上的样纸.在以前数据量很小时,我们通常将信息从键盘在屏幕上进行输入输出的, ...

  5. 总结文件操作函数-文件夹(三)-C语言

    获取.改变当前文件夹: 原型为: #include <unistd.h>   //头文件 char *getcwd(char *buf, size_t size); //获取当前文件夹.相 ...

  6. 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时间 ...

  7. php课程---文件操作及文件上传的代码总结

    php里面文件包含目录和文件两种 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  8. AIR文件操作:使用文件对象操作文件和目录 .

    来源:http://blog.csdn.net/zdingxin/article/details/6635376 在AIR中可以方便的对本地文件操作,不过上次做了个项目,发现还是有不少不方便的地方,比 ...

  9. Python之文件操作:文件的读写

    一.open函数:对文件读写之前,需要先打开文件,获取文件句柄 注意:open() file() 尽量使用open(),Python3以后不支持file()了 1.open(file_name[,ac ...

  10. linux常用命令之------文件操作、文件查看、权限、打包压缩

    1.一般公司把linux作为自己的应用服务器,将应用和服务器部署在上面 2.测试一般用来打包.压缩.查日志,写一个简单的shell 获得linux服务器的方式 a:网上租一台云服务器 b:安装vmwa ...

随机推荐

  1. Spring(八)SSH整合简述

    一.Spring与Struts2的整合 1.1.整合步骤 1.2.配置web.xml 1.3.配置spring配置文件applicationContext.xml 1.4.配置struts配置文件 1 ...

  2. 【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)

    最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们 ...

  3. IOS开发--仿制网易新闻

    学习来源:袁峥老师的<快速集成App中顶部标题滚动条> 此次博文写的是按需求分析写代码,思路条理性杠杠的,可以提高的编码实现速度哦. 效果:   根据这个网易新闻的界面,需求分析:     ...

  4. virtualbox 安装 虚拟机的时候报错不能创建新任务

    找到原因是因为自己的windows是破解的, 找到C:\Windows\system32\uxtheme.dll这个文件,我的破解的windows在这里自带了一个uxtheme.dll.backup的 ...

  5. Android Design Support Library——TextInputLayout

    前沿 上一篇介绍了NavigationView的主要使用方式,本章主要介绍TextInputLayout的使用方式. TextInputLayout——EditText悬浮标签 TextInputLa ...

  6. Effective Java 26 Favor generic types

    Use generic types to replace the object declaration Add one or more type parameters to its declarati ...

  7. Cocos2d-x分类

    Cocos2d-x win7 + vs2010 配置图文详解(亲测) Cocos2d-x建工程时避免copy文件夹和库

  8. Linux常用压缩和解压命令

    .tar 解包 tar xvf filename.tar.tar 打包 tar cvf filename.tar dirname.gz 解压1 gunzip filename.gz.gz 解压2 gz ...

  9. Kali Linux 网络扫描秘籍 翻译完成!

    Kali Linux 网络扫描秘籍 翻译完成! 原书:Kali Linux Network Scanning Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 ...

  10. uniq

    -c, --count 在每行前加上表示相应行目出现次数的前缀编号-d, --repeated 只输出重复的行-D, --all-repeated[=delimit-method 显示所有重复的行de ...