`
312758107
  • 浏览: 11292 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

文件格式与协议之加密解密

 
阅读更多
我们通常了解的文件格式,都是一些已知的后缀名,比如zip(压缩文件),jpg(图片文件),txt(文本文件)等。其实,这些文件的本质都相同,他们都是将数据拆分成一个个的字节,来存储和读取的。只是在存储文件和读取文件的时候,所用的协议不同,才使得他们的文件格式有所区别。

我们可以编写两段代码,实现两个小功能,来进一步了解文件的协议

本文介绍第一个小程序:文件的加密解密程序
其实,说是加密解密程序,有些抬高这小段代码,它的实质就是利用文件存储是按字节存储的规则,改变其中的协议,使文件保密效果更好。

我们要做的事很简单,只有两步:

1、了解我们要做什么。
   计算机在存储文件时,是将文件中的内容拆分成一个一个字节,以字节为单位存储。
   计算机在读取文件时,是将这些字节按照一定的规则读取出来,解释成不同的含义。
   我们所要做的很简单,就是将读取出来的文件字节,做一定的变化,写入另一个文件中,即可做到别人无法读取的目的,即所谓的加密。而在解密时,只要将这一规则反过来,就可得到原文件。

2、实时操作
(1)准备两根管子
java.io.FileInputStream类,可以理解为将指定目录的文件中的字节吸入这个管子中,实例化对象后调用read();方法读取数据,读取方式是以字节为单位读取。
FileInputStream fins = new FileInputStream(s);
int num = fins.available();//得到有效长度
byte[] bytes = new byte[num];//创建一个长度为字节数的数组
fins.read(bytes);//将数组中的字节一个一个读取出来
fins.close();//读取完后关闭这根管子


java.io.FileOutputStream类,可以理解为吸入的数据以字节为单位一个一个流到指定的文件上中,实例化对象后调用write();方法
FileOutputStream fous = new FileOutputStream(s);
for(int i=0;i<bytes.length;i++){
fous.write(bytes[i]);
}
fous.close();

此时得到的文件与原文件相同,我们可以准确无误的读取文件,相当于我们复制了一个文件,因为我们是按照同样的协议将读入的文件输出的

(2)修改协议
在(1)中,我们用输入流得到源文件中的每个字节,然后又将输入流中得到的每个字节原封不动的输出了出去。倘若我们将得到的字节“修改一下”,不是就可以达到别人无法读取的效果了吗?

将以上代码改为
FileOutputStream fous = new FileOutputStream(s);
for(int i=0;i<bytes.length;i++){
fous.write(bytes[i]+1);//将每个字节+1输出到文件中
}


怎么样,改过之后生成的文件是不是无法读取了呢?我们只是简单地将每个字节加了1,就可以达到这种目的,事实上复杂一些的也是可以的,大家可以试一试

(3)读取文件,给文件解密
如果只能将文件加密而不能解密的话,就是对文件实实在在的摧毁,因为任何人将无法使用它。而我们要给上面的程序解密,其实很简单,只要将文件按照原来的协议输出即可。

将要解密的文件中的字节一个个读取出来,遇上段代码相同
FileInputStream fins = new FileInputStream(s);
int num = fins.available();//得到有效长度
byte[] bytes = new byte[num];//创建一个长度为字节数的数组
fins.read(bytes);//将数组中的字节一个一个读取出来
fins.close();//关闭这根管子
return bytes;


再将读取到的字节一个个写出来
FileOutputStream fous = new FileOutputStream(s);
for(int i=0;i<bytes.length;i++){
fous.write(bytes[i]-1);
}


注意,在加密过程中,我们把每个字节都加了1输出,在这里,我们只要把这个文件每个字节减去1在输出,即可得到原来的文件了!

我们只是简单地进行了+1和-1,就可以达到别人无法读取的目的,这就是文件协议的魅力所在。只要再加上界面,选择框,就可以做一个最简单的加密器了。由于所有的文件都是按字节存储的,所以可以对任意的文本文件、图片、视频、音频进行加密,是不是很好玩呢?

分享到:
评论

相关推荐

    实现ftp文件分割,加密解密上传文件

    支持定时传输,文件分割合并,断点续传,aes加密解密,md5文件校验完整性。客户端实现文件分割,加密,服务端实现文件解密,合并。异地项目访问采用的是http协议,客户端根据http协议访问服务端对应的方法,返回一个...

    文件加密解密的代码参考

    应广大朋友要求,现将我之前上传的文件加密解密工具的代码发布出来供大家学习参考并改进。 如果大家有什么建议和改进,请也及时告诉我啊,互相学习。这是我三年前的毕业论文设计,很多东西都有缺陷。

    Java加密与解密的艺术.mobi

    综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;系统...

    Java加密与解密的艺术

    综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。, Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;...

    万能文件加密解密软件

    一款小巧的文件加密解密软件(主程序文件只有22KB),它可以加密任何类型的文件,被加密的文件拒绝访问或显示为无内容. 包括您的隐私. 支持鼠标直接托放文件到程序窗口,操作简单方便。

    JAVA加密与解密的艺术--第2版.rar

    全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、...综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。

    Java加密与解密的艺术配书源代码

    综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;系统...

    文件异地备份 文件加密解密 利用TCP协议文件远程备份

    开发工具vs2019 开发平台 .net core 3.1 语言 C#

    led屏发布系统 通信加密解密 socket通信协议制定

    主要用于全省范围内led屏的同步显示,多客户端登录显示,通信加密解密,制定通信协议等。用到了socket的异步通信,socket文件更新等技术

    Java加密与解密的艺术 第二版(清晰+书签+完整版).pdf

    Java加密与解密的艺术 第二版(清晰+书签+完整版).pdf真正第二版,《Java加密与解密的艺术(第2版)》是Java安全领域公认的标杆之作,被奉为每一位Java开发工程师必读的著作之一。由资深专家撰写,第1版4年来畅销不...

    加密文件系统

    解密是将数据从加密格式转换为原始格式的过程。一旦用户解密了文件,只要文件存储在磁盘上,它就会保持解密状态。EFS 只能对存储在磁盘上的数据进行加密。对传输在 TCP/IP 网络上的数据进行加密可使用以下两种可选...

    c# 加密和解密相关代码

    图19.3 使用ROT13算法加密解密数据 关 键技术 本实例实现时,主要是用Convert 类的ToChar 方法来获取单个字符的Unicode 编码,然后将字母的前13 个和后13 个对调,从而实现加密的功能。下面对Convert类的ToChar 方法...

    C语言实现PGP文件加密解密源码,可直接解译运行

    很珍贵的C语言实现PGP对文件加密解密,无Bug,保证可以直接编译运行!

    操作类(文件读写,XML操作,各种加密解密等)

    1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;...13、TEA(Tiny Encryption Algorithm)简单高效的加密算法,加密解密速度快,实现简单等等等等

    VC++下的文件传输加密协议

    VC++下的文件传输加密协议,初步实现了DES的加密,解密以及传输功能

    Java加密与解密的艺术-电子书-迷你版

    综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。 Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;...

Global site tag (gtag.js) - Google Analytics