资源简介
没有积分的私聊我 看到消息百分百发给你
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.xm
文件 308 2019-06-18 20:24 .idea\encodings.xm
目录 0 2019-06-17 12:38 .idea\inspectionProfiles\
文件 1444 2019-06-15 23:44 .idea\inspectionProfiles\Project_Default.xm
目录 0 2019-06-17 12:38 .idea\libraries\
文件 335 2019-06-15 23:49 .idea\libraries\opencv_330.xm
文件 530 2019-06-17 12:47 .idea\misc.xm
文件 8915 2019-06-16 19:53 .idea\uiDesigner.xm
文件 41686 2019-06-30 08:17 .idea\workspace.xm
文件 81 2019-06-15 23:45 2016115130.iml
文件 416 2019-06-15 23:44 pom.xm
目录 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个文件信息
- 上一篇:java连连看源代码
- 下一篇:基于Java的移动臂磁盘调度算法动态显示
相关资源
- mysql数据处理,java用户登录处理
- 法律咨询信息系统(java+jsp+sqlserver)
- Java快速开发平台源码(renren-fast)
- 锐聘学院QST青软JavaWeb十二个打包
- 3.3.6微信支付JAVA版demo
- javaweb网上购物系统源码(附数据库脚
- javaweb校园宿舍系统(附数据库脚本)
- JavaWeb书城项目(附数据库脚本)
- 基于JAVA_JSP电子书系统(源码+数据库
- Java网络编程知识点总结.xmind
- 一站式Java网络编程 BIO-NIO-AIO资料源码
- jsp讲解
- 基于SSH框架的JavaWeb项目—人员信息管
- javaweb实现的邮件收发系统(附数据库
- Java 仿QQ(附客户端以及服务端源码)
- Java TCP IP Socket
- java定时发送邮件(基于quartz)
- Java Swing开发的《星际争霸》游戏
- java+数据库商品交易管理系统(附数据
- 使用java语言编译一个计算器
- java swing工资管理系统(源码+数据库
- JAVALibrary
- 微信企业号回调模式Java版
- 顺丰丰桥接口开发详细教程源码含下
- Java博客概要设计文档
- 药品进销存管理系统(论文范文_JSP
- 奖学金管理系统java+jsp+mysql
- 毕设参考——基于java酒店管理
- Java写的一个简单的字体更改程序
- java8学习教程之lambda表达式的使用方法
评论
共有 条评论