• 大小: 33KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: Java
  • 标签: java  

资源简介

没有积分的私聊我 看到消息百分百发给你 1、算法核心: 1、读取图片A,获得其RGB三个通道数据并转换成三个矩阵a1,a2,a3。 2、读取文件B,将其转换成比特流b。 3、遍历b,得到比特b1,b2,b3,b4,b5,b6等等,将b1代替a1第一个元素的最低位,将b2代替a2第一个元素的最低位,将b3代替a3第一个元素的最低位,将b4代替a1第二个元素的最低位,以此类推。 2、具体实现: 1、隐写: 1、使用java ImageIO读取图片,获取其RGB通道信息。 2、使用java NIO读取被嵌入的文件,将其转换为byte数组,需要特别指出的是原生方法得到是byte类型的数组,但是算法实现需要更加精细的操作,所以还需要对得到的byte数组进行进一步的转换封装,将其转换成形如10101的数组。例如,读取文件得到byte数组的第一个元素为63,需将63转换为00111111数组。并且保存好文件的长度。 3、按照算法,遍历形如10101的数组 1、如果遍历到的值为0,将矩阵对应的矩阵元素与0xfe进行与运算,将最低位置为0 2、如果遍历到的值为1,将矩阵对应的矩阵元素与0x01进行或运算,将最低位置为1 4、将步骤3得到的经过经过隐写的矩阵写为一张新的图片。 3、读取 1、使用java ImageIO读取图片,获取其RGB通道信息。 2、使用隐写步骤3得到的文件长度,遍历图片的像素矩阵,需要特别指出的是因为后续步骤还需要进行进一步的转化,所以这一步是将得到的“100100......”序列每八位封装为一个数组,最终得到一些数组集合,每个数组包含八位二进制序列。 3、将步骤2得到的数组进行转换,例如00111111应该转换为byte类型数值为63的数字,10111111转换为-63。这一步会得到一个byte类型的数组。 4、将步骤3得到的byte类型数组写入文件,需要指出的是写入的文件形式应该和隐写模块步骤二中读入的文件形式一致。 3、程序使用方法 1、安装Java8 2、使用命令行进入jar文件所在目录下,使用命令 java -jar 2016115130.jar 3、安装提示输入嵌入和被嵌入的文件名字,注意路径问题

资源截图

代码片段和文件信息

package decrypt;

import encrypt.ReadAndWriteFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.File;
import java.io.IOException;

/**
 * 提取被隐写入图片的文件类
 */
public class Decrypt {

    public static void doDecrypt(String pathint fileLenString resultFile){
        try{
//            1、读入图片
            BufferedImage bimg = ImageIO.read(new File(path));
            Raster raster = bimg.getData();
//            2、获得图片的RGB通道信息,并且将其转换为矩阵,
//            应该注意的是java并不支持矩阵数据类型,所以这里的实现还是数组,只是人为地看成矩阵而已
            int [] temp = new int[raster.getWidth()*raster.getHeight()*raster.getNumBands()];
            int[] pixels  = raster.getPixels(00raster.getWidth()raster.getHeight()temp);
            int [] byteArr = new int[pixels.length];
//            3、核心步骤:将得到地RGB矩阵元素按照规律将每个元素模2,得到其最低位的数值
            for(int index = 0; index < pixels.length; index++){
               byteArr[index] = pixels[index] % 2;
            }
            byte []resultArr = new byte[fileLen];
            int resultArrIndex = 0;
//            4、核心步骤2:将得到的比特数组转化为字节数组
            for(int index = 0; index < byteArr.length-8; index+=8) {
                byte b = 0;
                int a = 0;
                if (byteArr[index] == 0) {
                     a =  byteArr[index + 1] * 64 + byteArr[index + 2] * 32
                            + byteArr[index + 3] * 16 + byteArr[index + 4] * 8 + byteArr[index + 5] * 4
                            + byteArr[index + 6] * 2 + +byteArr[index + 7];

                     b = (byte) a;
                }else {
                     a =  byteArr[index + 1] * 64 + byteArr[index + 2] * 32
                            + byteArr[index + 3] * 16 + byteArr[index + 4] * 8 + byteArr[index + 5] * 4
                            + byteArr[index + 6] * 2 + +byteArr[index + 7];
                         b = (byte) (0-a);
                    }
                if (resultArrIndex < resultArr.length) {
                    resultArr[resultArrIndex] = b;
                    resultArrIndex++;
                    }
                }
//             5、将得到的字节数组写入文件
            ReadAndWriteFile.ByteArr2File(resultArr resultFile);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-06-30 08:17  .idea\
     文件           6  2019-06-15 23:44  .idea\.name
     文件         577  2019-06-30 07:59  .idea\compiler.xml
     文件         308  2019-06-18 20:24  .idea\encodings.xml
     目录           0  2019-06-17 12:38  .idea\inspectionProfiles\
     文件        1444  2019-06-15 23:44  .idea\inspectionProfiles\Project_Default.xml
     目录           0  2019-06-17 12:38  .idea\libraries\
     文件         335  2019-06-15 23:49  .idea\libraries\opencv_330.xml
     文件         530  2019-06-17 12:47  .idea\misc.xml
     文件        8915  2019-06-16 19:53  .idea\uiDesigner.xml
     文件       41686  2019-06-30 08:17  .idea\workspace.xml
     文件          81  2019-06-15 23:45  2016115130.iml
     文件         416  2019-06-15 23:44  pom.xml
     目录           0  2019-06-17 12:38  src\
     目录           0  2019-06-17 12:38  src\main\
     目录           0  2019-06-18 09:39  src\main\java\
     目录           0  2019-06-30 08:11  src\main\java\decrypt\
     文件        2629  2019-06-30 08:11  src\main\java\decrypt\Decrypt.java
     目录           0  2019-06-30 08:17  src\main\java\encrypt\
     文件        3128  2019-06-30 08:17  src\main\java\encrypt\Encrypt.java
     目录           0  2019-06-18 12:25  src\main\java\utils\
     文件        1650  2019-06-18 12:25  src\main\java\utils\Byte2BitArr.java
     文件        1583  2019-06-18 09:41  src\main\java\utils\ReadAndWriteFile.java
     目录           0  2019-06-18 09:54  src\main\resources\
     目录           0  2019-06-17 12:38  src\test\
     目录           0  2019-06-18 10:03  src\test\java\
     文件         266  2019-06-18 10:03  src\test\java\GenTest.java
     目录           0  2019-06-18 10:03  target\
     目录           0  2019-06-18 12:25  target\classes\
     目录           0  2019-06-18 12:22  target\classes\decrypt\
     文件        1835  2019-06-18 12:22  target\classes\decrypt\Decrypt.class
............此处省略27个文件信息

评论

共有 条评论