资源简介

田军的《基于差分的可逆水印》的程序实现,整幅图片嵌入hash值,最后无损还原。附带PSNR分析

资源截图

代码片段和文件信息

function h = hash(inpmeth) 
% HASH - Convert an input variable into a message digest using any of 
%        several common hash algorithms 

% USAGE: h = hash(inp‘meth‘) 

% inp  = input variable of any of the following classes: 
%        char uint8 logical double single int8 uint8 
%        int16 uint16 int32 uint32 int64 uint64 
% h    = hash digest output in hexadecimal notation 
% meth = hash algorithm which is one of the following: 
%        MD2 MD5 SHA-1 SHA-256 SHA-384 or SHA-512  

% NOTES: (1) If the input is a string or uint8 variable it is hashed 
%            as usual for a byte stream. Other classes are converted into 
%            their byte-stream values. In other words the hash of the 
%            following will be identical: 
%                     ‘abc‘ 
%                     uint8(‘abc‘) 
%                     char([97 98 99]) 
%            The hash of the follwing will be different from the above 
%            because class “double“ uses eight byte elements: 
%                     double(‘abc‘) 
%                     [97 98 99] 
%            You can avoid this issue by making sure that your inputs 
%            are strings or uint8 arrays. 
%        (2) The name of the hash algorithm may be specified in lowercase 
%            and/or without the hyphen if desired. For example 
%            h=hash(‘my text to hash‘‘sha256‘); 
%        (3) Carefully tested but no warranty. Use at your own risk. 
%        (4) Michael Kleder Nov 2005 

% EXAMPLE: 

% algs={‘MD2‘‘MD5‘‘SHA-1‘‘SHA-256‘‘SHA-384‘‘SHA-512‘}; 
% for n=1:6 
%     h=hash(‘my sample text‘algs{n}); 
%     disp([algs{n} ‘ (‘ num2str(length(h)*4) ‘ bits):‘]) 
%     disp(h) 
% end 
 
inp=inp(:); 
% convert strings and logicals into uint8 format 
if ischar(inp) || islogical(inp) 
    inp=uint8(inp); 
else % convert everything else into uint8 format without loss of data 
    inp=typecast(inp‘uint8‘); 
end 
 
% verify hash method with some syntactical forgiveness: 
meth=upper(meth); 
switch meth 
    case ‘SHA1‘ 
        meth=‘SHA-1‘; 
    case ‘SHA256‘ 
        meth=‘SHA-256‘; 
    case ‘SHA384‘ 
        meth=‘SHA-384‘; 
    case ‘SHA512‘ 
        meth=‘SHA-512‘; 
    otherwise 
end 
algs={‘MD2‘‘MD5‘‘SHA-1‘‘SHA-256‘‘SHA-384‘‘SHA-512‘}; 
if isempty(strmatch(methalgs‘exact‘)) 
    error([‘Hash algorithm must be ‘ ... 
        ‘MD2 MD5 SHA-1 SHA-256 SHA-384 or SHA-512‘]); 
end 
 
% create hash 
x=java.security.MessageDigest.getInstance(meth); 
x.update(inp); 
h=typecast(x.digest‘uint8‘); 
h=dec2hex(h)‘; 
if(size(h1))==1 % remote possibility: all hash bytes < 128 so pad: 
    h=[repmat(‘0‘[1 size(h2)]);h]; 
end 
h=lower(h(:)‘); 
clear x 
return 








 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     527280  2009-03-19 23:41  基于差分的可逆水印\dmrc_difference_expansion.pdf

     文件       2814  2009-04-23 20:53  基于差分的可逆水印\hash.m

     文件      66616  2009-03-20 10:30  基于差分的可逆水印\lena.bmp

     文件        466  2009-04-23 20:37  基于差分的可逆水印\psnr.m

     文件       6291  2009-04-24 14:57  基于差分的可逆水印\Resersible_watermarking.m

     文件    2228924  2009-03-19 23:36  基于差分的可逆水印\revwm.pdf

     文件       3571  2009-04-22 20:21  基于差分的可逆水印\Rlecode.m

     文件        805  2009-04-16 20:51  基于差分的可逆水印\Rlerecode.m

     文件     281088  2009-04-25 18:47  基于差分的可逆水印\程序文档.doc

     目录          0  2009-04-25 18:48  基于差分的可逆水印

----------- ---------  ---------- -----  ----

              3117855                    10


评论

共有 条评论