将字符串嵌入图片能够次序选取像素点,也能够随机选取像素点。下面咱们顺次来结束每种算法

1. 次序嵌入

次序嵌入很简单,遍历每个像素点,然后将二进制嵌入究竟一位即第八位即可。

为了写陈述,我还画了一个流程图,这儿贴上来便利了解:

根据matlab和python的LSB隐写完成

1.1 python版别

首要我用python结束了一个,主要是对matlab不熟python123渠道登录悉,使用python3的PIL库写起来仍是很简单的。直接看代码吧

# coding:utf-8
# python 3.6.6
from PIL import Image
import time
# 将字符串转为二进制
def str_convert_bin(s):
result = ''
f矩阵的秩or c in s:
b = bin(ord(c)).replace('0b', '')
b = '0'*(7-len(b))+b
result = result+b
return result
# 将二进制转化为字符串
def bin_con矩阵的乘法运算vert_str(b):算法的五个特性
str=''
# 将二进制字符串每算法的时刻复杂度是指什么7位切割,成列表
b1 = [b[i:二进制计算器i+7] for i in range(0, len(b), 7)]
for i in range(len(b1矩阵的秩)):
b2 = chr(int(算法的时刻复杂度是指什么b1[i],2))
str = str+b2
retur矩阵n str
# 将二进制字符串嵌入图片像素B通道 im:Image()、bin1:要嵌入的矩阵的迹二进制串
def insert二进制(im,bin1):
size = im.size
length = len(bin1)
k=0
flag=0
for i in rpython培训班膏火一般多少ange(size[0]):
for j in range(size[1]):
# im.getpixel((i,j))读取像素点(i,j)的像素值
pixel_b=bin算法规划与剖析(im.getpix矩阵游戏el((i,j))[2]).replace('0b', '')
if pipython123渠道登录xepython是什么意思l_b[-1:]<bin1[k]:
# im.putpython是什么意思pixel((i,j),(x,y,z))设置像素点(i,j)的RGB值为(x,y,z)
im.putpixel((i,j),(im.getpixel((i,j))[0],im.getpixel((i,j))[1],im.getpixel((i,j))[2]+1))
if pixel_b[-1:]>bin1[k]:
im.putpixel((i,j),(im.getpixel((i,j))[0],im.getpixel((i,j))[1],im.getpixel((i,j))[2]-1)矩阵乘法)
k=k+1
if k==length:
flag=1
break
if flag==1:
bre矩阵的乘法运算ak
print("字符串嵌入结束nn")
# 提取字符串 im:Image()、length:二进制字符串长度
def extract(im,le算法的特性ngth):
size = im.size
k=0
result=''
flag=0
for i in range(size[0]):
for j in range(sizepython编程[1]):
pixel_b=bin(im.getpixel((i,j)二进制怎样算)[2]).replace('0b', '')
result二进制=result+pixel_b[-1:]
k=k+1
if k==l矩阵天王ength:
flag=1
break
if flag==1:
break
print("提取结束,二进制字符串为:n%s"%result)
str = bin_convert算法的特性_str(resupython培训班膏火一般多少lt)
print("转化结束,作用为:n%s"%str)
def main():
test_str=input("请输入字符串:n")
result = str_convert_bin(test_str)
print("待嵌入字符串转化为二进制为:n%s"%result)
print(矩阵的秩"开始嵌入....")
im = Image.open二进制转八进制("2.bmp")
insert(im, result)
time.sl二进制转化器eep(5)
print("开始提取字符串:")
extract(im, len(result))
if __name__=='__main__二进制转八进制':
main()

作用:
根据matlab和python的LSB隐写完成

1.2 matlpython下载安装教程ab 版别

后续更凌乱的隐写仍是需求用到matlab,于是乎仍是转matlab吧。

matlab就不介绍了,我也是先学先用,代码python123渠道登录写得粗糙,牵强贴上代码:

% By gengyanqing
% LSB躲藏(次序躲藏)
% 能够躲藏数字、字母、英文字符 ex: hello,world.111
% jpg失算法工程师真!用png/bmp
clear all;clc;
data=imread('1.png');  % 读入图片
str=input('请输入要潜入的字符串python能够做什么工作:','python培训班膏火一般多少s'); % 接收字符串
str_bin_mat=dec2binpython培训班膏火一般多少(str); % 字符串转二进制矩阵
% 二进python能够做什么工作制矩阵转字符串
l_str_bin_mat=sipython123ze(str_bin_mat); %二进制矩阵
str_bin='';
for i=1:l_str_bi算法的有穷性是指n_mat(1)
for j=1:l_str_bin_mpython保留字at(2)
str_bin=[str_bin,str_bin_mat(i,j)];
end
end
disp('待嵌入的字符串二进制方法为');
disp(str_bin);
% 检测是否能够完全嵌入
[l,w,h]=size(data);
if length(str_bin)>=l*w*h
error('字符长度超出!!!');
end
%嵌入程序
data1=data;
disp('开始嵌入');
flag1=1; %输入字符二进制长度,判别嵌入是否结束
flag2=1;
fla矩阵的乘法运算g3=1;
for i=1:l
if flag3==0
break
end
for j=1:w
if flag2==0
flag3=0;
br二进制怎样算eak
end
for k=1:h
if flag1>length(str_bin)
disp('over');
flag2=0;
break
end
a=dec2bin(data1(i,j,k),8);%数字取二进制
data1(i,j,k)=bin2d矩阵相乘怎样算ec([a(1:7),str_bin(flag1)]);%二进制相加,再取十进制
flag1=flag1+1;
end
end
end
%保存图片
imwrite(data1,'1-2.png矩阵')
disp('嵌入结束,保python怎样读存为1-2.png');
%以下为提取程序
disp('矩阵游戏开始提取...')
data2 = imread('1-2.png');
[l,w,h]=size(算法工程师data2);
str_bin1='';%提取到的二进制字符串
locationx=[];
locationy=[];
locationxy=[];
m=二进制转化器length(str_bin);
flag1=1;
flag2=1;
flag3=1;
for i=1:l
if flag3==0
break
end
for j=1:w
if flag2==0
flag3=0;
break
end
for k=1:h
if flag1>length(str_bin)
flag2=0;
break
end
a=dec2bin(data2(i,j,k),8二进制怎样算);%十进制转二进制矩阵相乘怎样算
str_bin1=[str_bin1,a(8)];% 取究竟一个数python是什么意思
flag1=flag1+1;
end
end
end
disp('提二进制转八进制取结束!');
disp('提取到的二进制字符串矩阵的乘法运算为:');
disp(str_bin1);
disp('开始转化...')
% 二进制转字符串
str2='';
f二进制怎样算or q=1:length(str_bin1)/l_矩阵相乘怎样算str_bin_mat(2)
w=str_bin1((q-1)*l_str_bin_mat(2)+1:q*l_str_bin_mat(python能够做什么工作2));%w为每七位
a=bin2dec(w); % 转化为十进制
if a>9
str2=[str2,char(a)];
e矩阵游戏nd
if a<9
str2=[st二进制八进制十进制十六进制转化r2,a];
end
end
dis二进制转八进制p('转化结束');
disp('毕算法导论竟作用为:'python下载安装教程);
disp(str2);

能够嵌字符,数字,字母,作用如下:

根据matlab和python的LSB隐写完成

2. 随机LSB隐写

其实这个和次序差不多,无非就是在遍历像素点的时候,将(i,j)改为随机的点,咱们能够写个随机函数随机生成列表X和Y,当要嵌入(i,j)时咱们就将其变为(X(i+j), Y(i+j)),为什么不是(算法是什么X(i)矩阵乘法, Y(j))读者能够想想(这样不随机)。

这个我也画了一个流程图,但是好算法工程师像有问题,时刻急切python123就暂时这样吧。

根据matlab和python的LSB隐写完成

接下来看生成随机列表的函数 randomxy.m:

% 随机生成两个列表
% l为长,w二进制的运算规矩为宽,l二进制en_str_bin二进制为嵌入二进制长度,key为随机种子
function [x,y]=randxy(l,w,len_str_bin,key)
%设置随机种子,生成一串随机数
rand('seed',key);
disp('hhhhhhhhh');
x=rapython能够做什么工作ndperm(l,len_str_bin);
y=ranPythondperm(w,len_str_bin);
%x = unique(x); %去重处理
%y = unique(矩阵天王y) ;%去重处理
end

然后看主要代码:

% By gengy矩阵乘法an矩阵计算器qing
% LSB躲藏(随机躲藏)
% 能够躲藏python下载安装教程数字、字母、英文字符 ex: hello,world.111
% jpg失真!用png/bmp
clear all;clc;
data=imrea算法的特性d('1.png');  %矩阵的初等变换规矩 读入图片
str=input('请输入要潜入的字python123渠道登录符串:','s'); % 接收字符矩阵串
str_bin_mat=dec2bin(str); % 字符串转二进制矩阵
% 二进制矩阵转字符串
l_str_bin_mat=矩阵天王size(str_bin_python123渠道登录mat); %二进制矩二进制转化为十进制阵
str_bin='';
for i=1:l_str_bin_mat(1)
for j=1:l_str_bin_mat(2)
str_bin=[str_bin,str_bin_mat(i,j)];
end
end
disp('待嵌入的字符串二进制方法为');
disp(str_bin);
% 检测是否能够完全嵌入
[l,w,h]=sizepython基础教程(da二进制转化器ta)矩阵天王;
if le矩阵的乘法运算ngth(str_bin)>=l*矩阵w*h
error('字矩阵计算器符长度超出!!!');
end
%嵌入程序
data1=data;
disp('开始嵌入');
flag1=1; %输入字符二进制长度,判别嵌入是否结束
flag2=1;
flag3=1;
% 调用randxy函数
[x,y]=randxy(l,w,length(str_bin),88);
for i=1:l
if flag3==0
break
end
for j=1:w
if flag2==0
flag3=0;
break
end
for k=1:h
if flag1>length(str_算法剖析的目的是bin)
disp('over');
flag2=0;
break
end
a=dec2bin(data1(x(i+j),y(i+j),k),8);%数字取二进制
data1(x(i+j),y(i+j),k)=bin2dec([a(1:7),str_bin(flag1)]);%二进制相加,再取十进制
flag1矩阵相乘怎样算=flag1+1;
end
epython培训班膏火一般多少nd
end
%保存图片
imwrite(data1,'1-2.png')
disp('嵌入结束,保存为1-2.png');
%以下为提取程序
%这儿供应了x和y,提取二进制字符串位数的信息
disp('开始提取...')
data2python是什么意思 = imread('1-2.png');
[l,w,h]矩阵游戏=size(data2);
str_bin1='';%提取到的二进制字符串
lo二进制怎样算cationx=[];
locationy=[];
locationxy=[];
m=length(str_bin);
flag1=1;
flag2=1;
flag3=1;
for i=1:l
if flag3==0
break
end
for j=1:w
if flag2==0
flag3=0;
break
end
for二进制亡者列车 k二进制的运算规矩=1:h
if flag1>length(str_bin)
flag2=0;
break
end
a=dec2bin(data2(x(i+j),y(i+j),矩阵k),8);%十矩阵乘法进制转二算法工程师进制
locationx=[locationPythonx,x(i+j)];%随机点x坐标
locationy=[locationy,y(i+j)];%随机点y坐标
locationxy=[locationxy;python基础教程x(i+j),y(i+j),k];
str_bin1=[str_bin1,a(8)];% 取究竟一个数
flag1=flag1+1;
end
end
end
disp('提取结束!');
disp('提取到的二进制字符串为:');
disp(str_bin1);
disp('开始转化算法的有穷性是指..矩阵游戏.')
% 二进制转字符串
str2='';
fpython培训班膏火一般多少or q=1:二进制转化为十进制length(str_bin1)/l_str_bin_矩阵mat(2)
w=str_bin1((q-1)*l_python怎样读str_bin_mat(2)+1:q*l_str_bin_mat(2));%w为每七python是什么意思位
a=bin2de算法的有穷性是指c(w); % 转化为十进制
if a>9
str2=[str2,char(a矩阵的乘法运算)];
end
if a<9
str2=[str2,a];
end
end
disp('转化结束');
disp('究竟作用为:');
disp(str2);
disp('随机方位分别为');
disp(locationxy);
plot(locationx,locationy);

作用:
根据matlab和python的LSB隐写完成

下图为躲藏点的图(能够看出来确实是随机的)

根据matlab和python的LSB隐写完成