A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 死灰复燃 中级黑马   /  2016-6-22 00:55  /  827 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有如下程序: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.
想了好久都不懂怎么回事,哪位大神知道,



7 个回复

倒序浏览
本帖最后由 yuanjun52306 于 2016-6-22 02:14 编辑

问题出在运算符优先级上,加密那里改成这样就对了(b^123)+3*6
回复 使用道具 举报
问题只有一个,  一个byte数在在转成int的时候取值范围是0-255,,如果你减去18的话, 不能保证这个图片中的每个字节仍然是0-255的数, 而一旦超出这个范围,例如成为负数, 那么你在copy的时候, 那个字节已经完完全全成了一个不可能在逆转回来的数,,   
回复 使用道具 举报
顶一下,,,,,,,,
回复 使用道具 举报
运算符^的优先级比+低!  应该是b^123+3*6

评分

参与人数 1黑马币 +1 收起 理由
死灰复燃 + 1 赞一个!

查看全部评分

回复 使用道具 举报
运算符^的优先级比+低!  应该是b^123+3*6
回复 使用道具 举报
顶一个!
回复 使用道具 举报
有没有使用flush()方法对刷新一下我们的流,可能有一两个没有写进去的话也会导致图片解密不成功
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马