% 函数文件名 hashreplacement.m
% 函数功能 本函数将利用MD5函数产生随机的无碰撞的像素选择策略
% 输入函数举例 [row,col] = hashreplacement(test,60,1983,421,1121)
% 参数说明
% matrix 为载体矩阵
% quantity 为要嵌入的信息的数量(要选择的像素数量)
% key1,key2,key3为三个密钥
% row 为伪随机输出的像素行标
% col 为伪随机输出的像素列标
function[row,col] = hashreplacement(matrix,quantity,key1,key2,key3)
% 记录载体矩阵大小
[X,Y] = size(matrix);
% 初始化 row 和 col
row = zeros([1,quantity]);
col = zeros([1,quantity]);
j = zeros([1,quantity]);
for i = 1:quantity
v = round(i/X);
u = mod(i,X);
q = u+key1;
s = v+key2;
t = u+key3;
v = mod(v+md52num(m),Y);
u = mod(u+md52num(n),X);
v = mod(v+md52num(w),Y);
j(i) = v*X+u+1;
col(i) = mod(j(i),Y);
row(i) = j(i)/Y;
row(i) = double(uint8(row(i)))+1;
if col(i) == 0
col(i) = Y;
row(i) = row(i)-1;
end
end
function m = md5(q);
function n = md5(s);
function w = md5(t);
% hashreplacement 的子函数用以将MD5码转成数字
function result = md52num(md5code)
result = 0;
for i = 1:32
result = result + table(md5code(i))*i;
end
% hashreplacement 的子函数用以查表转换16进制字符为数字
function a=table(character);
switch character
case '0',a=0; case '1',a=1; case '2',a=2; case '3',a=3; case '4',a=4;
case '5',a=5; case '6',a=6; case '7',a=7; case '8',a=8; case '9',a=9;
case 'a',a=10; case 'b',a=11; case 'c',a=12; case 'd',a=13;case 'e',a=14; otherwise a=15;
end
function y=md5(M);
function y=md5dll(M);
请各位看完之后,对里面的错误给予指出来,最好能提供解决的办法,谢谢!