图片加密信息(16进制)

 图片像素加密,中文转unicode 16进制。纯16进制加密。

一张1920*1030的图片极限可以加密的文字是370,800个字。

纯中文文本txt笔记本 370800个字一行 是1.06 MB (1,112,397 字节)

我用来加密的图片原图3.17 MB (3,326,616 字节)

加密后2.79 MB (2,927,062 字节)

加密的是滕王阁序全文945个字符 txt文件中2.76 KB (2,832 字节)

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

        String zifuchuan = "滕王阁序【作者】王勃【朝代】唐。豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?嗟乎!时运不齐,命途多舛。冯唐易老,李广难封。屈贾谊于长沙,非无圣主;窜梁鸿于海曲,岂乏明时?所赖君子见机,达人知命。老当益壮,宁移白首之心?穷且益坚,不坠青云之志。酌贪泉而觉爽,处涸辙以犹欢。北海虽赊,扶摇可接;东隅已逝,桑榆非晚。孟尝高洁,空余报国之情;阮籍猖狂,岂效穷途之哭!勃,三尺微命,一介书生。无路请缨,等终军之弱冠;有怀投笔,慕宗悫之长风。舍簪笏于百龄,奉晨昏于万里。非谢家之宝树,接孟氏之芳邻。他日趋庭,叨陪鲤对;今兹捧袂,喜托龙门。杨意不逢,抚凌云而自惜;钟期既遇,奏流水以何惭?呜乎!胜地不常,盛筵难再;兰亭已矣,梓泽丘墟。临别赠言,幸承恩于伟饯;登高作赋,是所望于群公。敢竭鄙怀,恭疏短引;一言均赋,四韵俱成。请洒潘江,各倾陆海云尔:滕王高阁临江渚,佩玉鸣鸾罢歌舞。画栋朝飞南浦云,珠帘暮卷西山雨。闲云潭影日悠悠,物换星移几度秋。阁中帝子今何在?槛外长江空自流。";
        String laster = "";
        //遍历字符串转化为2进制

        String bianliangA = gbEncoding(zifuchuan);
        String bianliangB=bianliangA.replace("\\u", "");
        laster = shiliuzhuaner(bianliangB);
        //将图片转成全偶数rpg值,再加上我们的数据。
        /**
         *java读取图像的rpg值,可以对rgb进行修改后输出新图像
         */
        String url = "D:\\TESTCON.png";
        File file = new File(url);
        BufferedImage BI = null;
        try {
            BI = ImageIO.read(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        int width = BI.getWidth();
        int height = BI.getHeight();
        int minx = BI.getMinX();
        int miny = BI.getMinY();
        int[] rgb = new int[3];
        for (int i = minx; i < width; i++) {
            for (int j = miny; j < height; j++) {
                //获得像素值
                int pixel = BI.getRGB(i, j);
                rgb[0] = (pixel & 0xff0000) >> 16;
                rgb[1] = (pixel & 0xff00) >> 8;
                rgb[2] = (pixel & 0xff);
                //此处将图片rpg奇数值降一,使rpg值全为偶数。
                if (rgb[0] % 2 == 1) {
                    pixel = pixel - 1 * 256 * 256;
                }
                if (rgb[1] % 2 == 1) {
                    pixel = pixel - 1 * 256;
                }
                if (rgb[2] % 2 == 1) {
                    pixel = pixel - 1;
                }
                //加入我们的数据
                if(laster.length()>(j*3+0+i*3*height)){
                    if(String.valueOf(laster.charAt(j*3+0+i*3*height)).equals("1")){
                        pixel = pixel+1 * 256 * 256;
                    }
                }
                if(laster.length()>(j*3+1+i*3*height)){
                    if(String.valueOf(laster.charAt(j*3+1+i*3*height)).equals("1")){
                        pixel = pixel+1 * 256 ;
                    }
                }
                if(laster.length()>(j*3+2+i*3*height)){
                    if(String.valueOf(laster.charAt(j*3+2+i*3*height)).equals("1")){
                        pixel = pixel+1;
                    }
                }
                /**
                 *利用BI.setRGB对图像的像素值进行修改
                 */
                BI.setRGB(i, j, pixel);
            }
        }
        /*
         *将修改后的图像进行输出
         */
        Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName("png");//自定义图像格式
        ImageWriter writer = it.next();
        ImageOutputStream ios = ImageIO.createImageOutputStream(new File("D:/testAA.png"));//自定义图像路径

        writer.setOutput(ios);
        writer.write(BI);
        BI.flush();
        ios.flush();
    }


    /*
     * 中文转unicode编码
     */
    public static String gbEncoding(final String gbString) {
        char[] utfBytes = gbString.toCharArray();
        String unicodeBytes = "";
        for (int i = 0; i < utfBytes.length; i++) {
            String hexB = Integer.toHexString(utfBytes[i]);
            if (hexB.length() <= 2) {
                hexB = "00" + hexB;
            }
            unicodeBytes = unicodeBytes + "\\u" + hexB;
        }
        return unicodeBytes;
    }

    
    public static String shiliuzhuaner(final String bianliang) {
        //16进制转10进制
        BigInteger sint = new BigInteger(bianliang, 16);
        //10进制转2进制
        String result = sint.toString(2);
        //判断结果是否是16个字符长度。
        int fori = 16 - result.length();
        for (int i = 0; i < fori; i++) {
            result = "0" + result;
        }
        return result;
    }

问题,为啥我加密后输出的图片比原图片文件大小,小了三分之一,,是我原图片里有啥信息么。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值