你也可以使用的加密解密
程序员文章站
2022-06-01 15:53:56
...
一、简介
加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)
今天主要介绍通过异或加密。
二、技术介绍
异或是一种数学运算符,计算机符号为“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);//459
System.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格式;或者在输出流的时候加几个特殊字符,输入流时判断并删减特殊字符还原,后续继续介绍加密解密思路
上一篇: Spark SQL