黑马程序员技术交流社区

标题: IO流图片加密 [打印本页]

作者: 死灰复燃    时间: 2016-6-22 00:55
标题: IO流图片加密
有如下程序:public static void main(String[] args) throws IOException {
                FileInputStream fis = new FileInputStream("天空.jpg");
                FileOutputStream fos = new FileOutputStream("copyy.jpg");
                int b = 0;
                while((b=fis.read())!=-1){
                        fos.write(b^123+3*6);
                }
                fis.close();
                fos.close();
        }
这里给天空.jpg文件加密.
public static void main(String[] args) throws IOException {
                FileInputStream fis = new FileInputStream("copyy.jpg");
                FileOutputStream fos = new FileOutputStream("copyy1.jpg");
                int b = 0;
                while((b=fis.read())!=-1){
                        fos.write((b-3*6)^123);
                }
                fis.close();
                fos.close();
        }

这里给加密后的copyy,jpg解密,但是发现仍然打不开coppy1.jpg.
想了好久都不懂怎么回事,哪位大神知道,




作者: yuanjun52306    时间: 2016-6-22 02:04
本帖最后由 yuanjun52306 于 2016-6-22 02:14 编辑

问题出在运算符优先级上,加密那里改成这样就对了(b^123)+3*6
作者: 何亚辉    时间: 2016-6-22 09:32
问题只有一个,  一个byte数在在转成int的时候取值范围是0-255,,如果你减去18的话, 不能保证这个图片中的每个字节仍然是0-255的数, 而一旦超出这个范围,例如成为负数, 那么你在copy的时候, 那个字节已经完完全全成了一个不可能在逆转回来的数,,   
作者: wrui    时间: 2016-6-22 22:15
顶一下,,,,,,,,
作者: 杨海峰    时间: 2016-6-22 22:52
运算符^的优先级比+低!  应该是b^123+3*6
作者: 杨海峰    时间: 2016-6-22 22:54
运算符^的优先级比+低!  应该是b^123+3*6
作者: Kingchen    时间: 2016-6-22 23:01
顶一个!
作者: jeremyhe    时间: 2016-6-22 23:25
有没有使用flush()方法对刷新一下我们的流,可能有一两个没有写进去的话也会导致图片解密不成功




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2