你也可以使用的加密解密

一、简介

加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)

今天主要介绍通过异或加密。

二、技术介绍

异或是一种数学运算符,计算机符号为“xor”,数学符号为“⊕”

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

运算法则有:

1. a ⊕ a = 0

2. a ⊕ b = b ⊕ a

3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;

4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.

5. a ⊕ b ⊕ a = b.

6.若x是二进制数0101,y是二进制数1011;

则x⊕y=1110

只有在两个比较的位不同时其结果是1,否则结果为0

即“两个输入相同时为0,不同则为1”!

 

三、实践

3.1.原理

int i = 3;System.out.println(i^456);//459System.out.println(i^456^456);//

3.2.应用

public static void main(String[] args) throws Exception {

        //加密        FileInputStream in = new FileInputStream("D:\\testFile\\test1.jpg");        FileOutputStream out = new FileOutputStream("D:\\testFile\\test2.dat");
        BufferedInputStream bin = new BufferedInputStream(in);        BufferedOutputStream bout = new BufferedOutputStream(out);
        int len;        while((len=bin.read())!=-1){            bout.write(len^456);        }        bout.close();        bin.close();    }

 生成的test2.dat 文件无法用图片编辑器打开

 

​​​​​​​

public static void main(String[] args) throws Exception {        //解密        FileInputStream in = new FileInputStream("D:\\testFile\\test2.dat");        FileOutputStream out = new FileOutputStream("D:\\testFile\\test3.jpg");
        BufferedInputStream bin = new BufferedInputStream(in);        BufferedOutputStream bout = new BufferedOutputStream(out);
        int len;        while((len=bin.read())!=-1){            bout.write(len^456);        }        bout.close();        bin.close();    }

 生成的test3与test1文件一样,成功解密

3.3.延伸

    我们发现微信的缓存聊天图片均使用加密处理

    经过测试我们发现,微信的加密图片也是经过异或处理,所以我们只需要知道异或值就可以还原图片。jpg图片文件头一般为FF D8 开头的,所以使用科学计算器,计算异或值。

四、总结

对图片加密解密的方法还很多,比如将图片转成base64格式;或者在输出流的时候加几个特殊字符,输入流时判断并删减特殊字符还原,后续继续介绍加密解密思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值