LSB Matching 隐写算法分析与理解

LSB Matching 隐写算法分析与理解

*信息隐藏技术*(隐写术),即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学。

信息隐藏技术(隐写术),即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学。隐写术英文作“Steganography”,来源于约翰尼斯·特里特米乌斯一本看上去是有关黑魔法,实际上是讲密码学与隐写术的一本书Steganographia中。此书书名来源于希腊语,意为“隐秘书写”。
最简单的隐写算法有LSB(最低有效位),即将载体图像的二进制最低有效位和秘密信息的比特进行对比,如果相同,则载体图像对应位的值不变;如果不同,则将载体图像的最低有效位的值换为秘密信息的比特。
即有:偶数+1——>奇数; 奇数-1——>偶数。这样就形成了数值对:偶数只能加1变成奇数,奇数只能减1变成偶数。如果用图象灰度直方图,很容易发现这种数值对效应。使得LSB检测起来非常容易。于是就改进了这种算法,新算法LSB Matching 能很好的克服数值对效应。
LSB Matching 当秘密信息与载体图像的LSB相同时不作改动,否则将像素值随机加减1。 为了避免溢出,当载体像素值为0时,则加1;当载体像素值为255时,则减1。其他需要加减1的则随机进行,这样就避免了偶数只能加1变成奇数和奇数只能减1变成偶数的数值对效应。
给代码如下:

for i=1:100 
    cover=double(imread(['\LSB_Matching\' num2str(i) '.bmp'])); 
    [m n]=size(cover); 
    message=double(rand(m,n)>0.5); 
    message_plus=2*(double(rand(m,n)>0.5)-0.5); 
    cover1=mod(cover,2); 
    a=cover1; 
    for x=1:m 
        for y=1:n
            % if cover(x,y)==0
            % cover(x,y)=cover(x,y)+1;
            % elseif cover(x,y)==255
            % cover(x,y)=cover(x,y)-1; 
            if cover1(x,y)==message(x,y) 
                cover1(x,y)=message(x,y);
            elseif cover1(x,y)==0 
                cover1(x,y)=cover(x,y)+1; 
            elseif cover1(x,y)==255 
                cover1(x,y)=cover(x,y)-1; 
            else cover1(x,y)=cover(x,y)+message_plus(x,y); 
        end 
    end 
end 
cover=cover1+(cover-a); 
test=mod(cover,2); 
length(find((double(test)-message)~=0))
% imwrite(cover,['\LSB_Matching\stego1_' num2str(i) '.bmp']);
end

你可能感兴趣的:(图像处理,matlab,matlab,隐写,LSB,密码学,算法)