LSB算法——隐藏文字信息

LSB(Least Significant Bit)最低有效位,指二进制中最低位数值。

详见WiKi:https://en.wikipedia.org/wiki/Least_significant_bit

隐写术

隐写术是一种关于信息隐藏的技术,通常利用位图的RGB三种颜色值(0~255)在微小改变的情况下难以被人眼察觉的特点。每种颜色值都可以用8位二进制来表示,而最低有效位LSB技术就是通过修改最低几位的数值来将信息嵌入到图片中去。

详见WiKi:https://en.wikipedia.org/wiki/Steganography

相关方法

LSB方面的论文有很多,在此利用以下这篇

Chan C K, Cheng L M. Hiding data in images by simple LSB substitution[J]. Pattern recognition, 2004, 37(3): 469-474.

http://www.sciencedirect.com/science/article/pii/S003132030300284X

其具体的思路如下:

1. 设图像像素为MC×NC, C表示原8-bit图像

C={xij|0≤i

M

为n-bit待隐藏的消息

M={mi|0≤i

2. 将

M

重排为

M′

M′={m′i|0≤i

其中

n′

,则

m′

可以表示为:

m′i=Σk−1j=0mi×k+j×2k−1−j

3. 从原图中按照既定规则挑选出

n′

个像素:

{xl1,xl2,...,xln′}

,嵌入过程是通过用

m′

替换

xli

k

位LSBs,则

xli

会被替换成

x′li=xli−(xlimod2k)+m′i

4. 提取消息的方法为:

m′i=x′limod2k

MATLAB相关函数解释

imread( ) 用于读取需要嵌入隐藏信息的图片,并存储为 uint8 类型的三维RGB矩阵,每个数值都位于0~255间

strcat( ) 用于字符串连接

unicode2native( ) 将 unicode 编码转化为相应的数字字节,相对应的 native2unicode( ) 是将数字字节转化为对应的 unicode 编码

dec2bin( ) 将十进制数转化为二进制,可选参数为最少几位二进制,相应的 bin2dec( ) 是将二进制转化为十进制

strjoin( ) 将元胞中的字符串数组组合成一个单字符串

double( ) 将字符转化成相应的 ASCII 码,相应的 char( ) 将 ASCII 码转化成字符

imwrite( ) 将矩阵存成图片

注意事项

MATLAB的 imwrite() 函数存成图片时,若选用 .jpg 格式则会出现一定程度的失真,导致无法提取出正确信息,因此最好存为 .png 或其他格式

以下给出的代码以EOF作为嵌入结束的标志

以下代码适用于2-LSB

以下代码有选择地将信息嵌入红、绿、蓝中的一层

源码

嵌入函数

function [] = LSB_embed(name, message, lsb, color)

% LSBembed(name, message, lsb) LSB in steganography (embed)

% name: the picture's path and name

% message: the data you want to hide in the picture

% lsb: lsb-rightmost LSBs

% color: 1-red, 2-green, 3-blue

%

% Author: Moming

% 2016-03-16

image = imread(name);

msg_origin = unicode2native(strcat(message, char(4)), 'UTF-8'); % UTF-8 encode, 'EOT' is the end tag

msg_bin = dec2bin(msg_origin, 8); % convert to binary

msg = strjoin(cellstr(msg_bin)',''); len = length(msg) / lsb; while len ~= fix(len) strcat(msg, char(4)); len = length(msg) / lsb; end tmp = blanks(len); for i = 1 : len tmp(i) = char(bin2dec(msg((i - 1) * lsb + 1 : i * lsb)) + '0'); % '0' is a kind of placeholder end % use Red, Green or Blue layer = image(:, :, color); for i = 1 : len layer(i) = layer(i) - mod(layer(i), 2^lsb) + double(tmp(i) - '0'); % only to be consistent with front end % save the picture image_result = image; image_result(:, :, color) = layer; imshow(image_result); imwrite(image_result, 'result.png'); % jpg would lose some information

end

提取函数

function [msg_origin] = LSB_extract(name, lsb, color)

% LSB_extract(name, lsb) LSB in steganography (extract)

% name: the picture's path and name

% lsb: lsb-rightmost LSBs

% color: 1-red, 2-green, 3-blue

%

% Author: Moming

% 2016-03-17

image = imread(name);

layer = image(:, :, color);

tmp = blanks(0);

n = prod(size(layer));

% if lsb ~= 2, then you need to change something below

for i = 1 : n * lsb / 8

tmp((i - 1) * 4 + 1 : i * 4) = mod(layer((i - 1) * 4 + 1 : i * 4), 2^lsb);

msg((i - 1) * 8 + 1 : i * 8) = dec2bin(tmp((i - 1) * 4 + 1 : i * 4), lsb)'; msg_origin(i) = bin2dec(msg((i - 1) * 8 + 1 : i * 8)); if msg_origin(i) == 4 % EOT is the end tag break; end end msg_origin = native2unicode(msg_origin,'UTF-8'); msg_origin = msg_origin(1:end-1); end

改进:嵌入到RGB三层中

由于单个像素点的值表示成二进制为8位,为了方便进行嵌入,补上一位,凑成9位,分别嵌入到RGB三层中,且补上的一位以‘0’、‘1’、‘0’、‘1’的顺序出现,以达到‘0’、‘1’平衡,最后一个字符嵌入时对其补上的一位取反,作为结束标记

嵌入算法

function [] = LSB_embed(name, message)

% LSBembed(name, message, lsb)

% name: the picture's path and name

% message: the data you want to hide in the picture

% LSB in steganography (embed)

%

% Author: Moming

% 2016-03-20

lsb = 3;

image = imread(name);

msg_origin = unicode2native(message, 'UTF-8'); % UTF-8 encode

msg_bin = dec2bin(msg_origin, 8); % convert to binary

msg = blanks(9);

for i = 1 : size(msg_bin, 1)

msg(i, :) = strcat(msg_bin(i, :), char(mod(i, 2) + '0'));

end

msg = strjoin(cellstr(msg)',''); msg(end) = char(mod(size(msg_bin, 1) + 1, 2) + '0'); % change the last bit as the end tag len = length(msg) / lsb; tmp = blanks(len); for i = 1 : len tmp(i) = char(bin2dec(msg((i - 1) * lsb + 1 : i * lsb)) + '0'); % convert to decimal end % use RGB result = image; rgb = 1; [len_R, len_G, len_B] = size(result); for R = 1 : len_R for G = 1 : len_G for B = 1 : len_B if rgb <= len % only to be consistent with front: '0' result(R, G, B) = result(R, G, B) - mod(result(R, G, B), 2^lsb) + double(tmp(rgb) - '0'); rgb = rgb + 1; end end end end imshow(result); imwrite(result, 'result.png'); % jpg would lose some information

end

提取算法

function [msg_origin] = LSB_extract(name)

% LSB_extract(name, lsb)

% name: the picture's path and name

% LSB in steganography (extract)

%

% Author: Moming

% 2016-03-20

image = imread(name);

lsb = 3;

index = 1;

rgb = zeros(0);

[len_R, len_G, len_B] = size(image);

flag = char('0'); % use to detect the end tag

for R = 1 : len_R

for G = 1 : len_G

tmp = blanks(0);

for B = 1 : len_B

tmp = strcat(tmp, mod(image(R, G, B), 2^lsb) + '0'); % '0' is useful!!! Placeholder...

end

tmp_bin = dec2bin(tmp - '0', 3)'; rgb(index) = bin2dec(tmp_bin(1 : 8)); if flag + tmp_bin(9) ~= 97 % '0'/'1' is the end tag msg_origin = native2unicode(rgb, 'UTF-8'); return; end index = index + 1; flag = tmp_bin(9); end end end

lsb信息隐藏算法matlab,利用LSB算法隐藏文字信息的MATLAB实现相关推荐

  1. ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性

    ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 目录 输出结果 实现代码 输出结果 更新-- 实现代码 %RF:RF实现根据乳腺肿瘤特征 ...

  2. matlab切割肿瘤算法,ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性...

    ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 目录 输出结果 实现代码 输出结果 更新-- 实现代码 %RF:RF实现根据乳腺肿瘤特征 ...

  3. 新颖性搜索(Novelty Search,NS)算法实践——利用NS算法解决迷宫导航问题

    新颖性搜索(Novelty Search,NS)算法实践--利用NS算法解决迷宫导航问题 新颖性搜索(Novelty Search,NS)算法介绍 NS实现基础 NovItem NoveltyArch ...

  4. 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR

    [Python例]利用 python 进行图片文字信息的提取 - OCR-EasyOCR 本文主要用于记录,并使用 python 脚本进行图片文字信息的生成. 什么是 OCR? OCR OCR(Opt ...

  5. matlab 利用polyfitpolyval函数进行基线矫正【matlab程序】

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %对原始数据进行基线矫正 %通过矫正,使起始 ...

  6. 网络空间安全之信息追踪——学习笔记 利用门户网站,综合信息追踪

    企业信息追踪与防护: 对于一个公司来说,只要牵扯到公司任一信息,都可以称之为公司的机密文件! 知名门户网站搜索: 新华网:http://www.xinhuanet.com/ 党中央直接部署的,重大影响 ...

  7. 利用已有的标注文字信息制作fake数据

    from PIL import Image, ImageDraw, ImageFont, ImageFilter import random import glob import numpy as n ...

  8. 基于matlab数字识别算法系统设计与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 目 录 内容摘要------------------------------1 关键字----- ...

  9. 利用MSER算法提取图像区域(车牌区域)的OpenCV代码~

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 我的博客中前面已经写了两种方法来实现车牌区域的提 ...

  10. ML之PLiR之Glmnet:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测)

    ML之PLiR之Glmnet算法:利用Glmnet算法求解ElasticNet回归类型问题(实数值评分预测) 目录 输出结果 1.Glmnet算法 实现代码 输出结果 0 2 1 2 2 2 3 3 ...

最新文章

  1. SAP PP 成品工单批次号跟所消耗的半成品批次号一致
  2. arm oe linux gnueabi 系统,【技术分享】Quectel 4G模块Opencpu中实现高通wifi功能
  3. Asp.Net第二章服务器端控件
  4. JAVA多线程和并发面试问题
  5. 在各个PC端应用使用表情的快捷键,王大妈都开始用这个表情啦
  6. jquery: JS淘宝网产品图片局部放大代码
  7. 获取某一数据库的所有存储过程的名字
  8. 第七讲:tapestry可预览的模板页
  9. 计算机网络八校联考试题,2019届高三信息技术3月联考试卷有解析与答案
  10. 概率论与数理统计【一】- 随机事件与概率(1):古典概型与几何概型
  11. 关于onclick中的event对象和element对象
  12. 【51单片机】利用烧录软件生成延时函数 入门学习
  13. php逻辑判断真假,逻辑判断之真假推理型答题技巧
  14. 贴片电阻系列命名标准
  15. windows 2012下安装.NET框架时出现组件的文件跟组件清单中的验证信息不匹配,无法安装
  16. 《魔鬼搭讪学》《魔鬼约会学》读后感
  17. 乌合之众-大众心理研究(五)
  18. android 开发框架 andbase,Android快速开发框架andbase
  19. html表格固定首行首列
  20. 微信公众号怎么发PDF文件

热门文章

  1. java 问题 无法解析类型 java.lang.CharSequence。从必需的 .class 文件间接引用了它
  2. word中文章页码出现{PAGE}{PAGE \* MERGEFORMAT}的解决办法
  3. 帮你正确理解“财富自由”
  4. java栈中存放_java栈存放什么?java堆存放什么?
  5. git管理账户忘记了_gitlab管理员账号密码重置
  6. 如何看懂公司的财务报表(1)
  7. mysql存储图片特征向量_图像特征提取之(一)HOG特征
  8. 2021编程语言排行榜出炉
  9. 如何入门短视频剪辑?先要有五大思维,有想法才能有如神助
  10. intellij idea 修改字体 修改主题