对任意类型的文件加密小技巧

相信每个人都有小秘密吧,今天给大家分享一个小方法。使用流的方式对任意类型的文件进行加密。

 首先,分析一下在计算机中是如何存储文件的。相信大多数人都有了解,计算机中存储文件的方式实际上是将文件中的二进制数据存储在磁盘或其他的存储设备中。

最基本的存储单位是位(bit),也是计算机中最小的信息单位,每一位只能表示0或1的二进制数据。在计算机中,8个位组成了一个字节(byte)。

而我们今天就是利用字节来对我们的文件进行加密。在Java中,“^”是按位异或运算符。它将两个数的二进制位进行比较,如果相同则结果为0,如果不同则结果为1。

比如:100^11=

          100对应二进制为        0 1 1 0 0 1 0 0

         11 对应的二进制为       0 0 0 0 1 0 1 1

                                         ---------------------------        

                                              0 1 1 0 1 1 1 1

在进行一次相同的操作          0 0 0 0 1 0 1 1 

                                        ----------------------------

就变成了原来储存的字节了   0 1 1 0 0 1 0 0        

 1.true相当于是1,false相当于0。

public class Text {
    public static void main(String[] args) {
        System.out.println(true^true);
    }
}

 2.验证(100^11)^11=100

public class Text {
    public static void main(String[] args) {
        System.out.println(100^11);
        System.out.println((100^11)^11);
    }
}

 3.进入正题,如何加密

加密的时候只能一个字节一个字节的进行读取,为了高效的进行这里使用了缓冲区,减少了从磁盘读取的时间。

import java.io.*;

public class encrypt {
    public static void main(String[] args) throws IOException {
        //要加密文件的路径(可以是绝对路径也可以是相对路径)
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("src/IO/d"));
        //加密后的文件路径
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/IO/e"));
        int ch;
        while((ch=bis.read())!=-1){
        作用是将指定文件中的每一个字节与数字2进行按位异或运算,可以是任意数字
            bos.write(ch^2);
        }
        //关流
        bos.close();
        bis.close();
    }
}

 4.解密

用相同的代码进行解密,需要将加密后的文件路径放入BufferedInputStream流中,

解密后的文件路径放入BufferedOutputStream流中。强调一下,无论是加密或者解密第二个文件路径的父级路径必须存在,否则会报"FileNotFoundError"类型的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊没烦恼~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值