matlab里怎么运行MD5函数? 书上的代码如下: function y = md5(M) y = md5dll(M); end

md5dll文件,我已经下载,并放在了matlab的work文件夹下。
其实这个问题,主要是关于hash函数的,在里面调用了md5函数,但一直无法正常使用。
hash函数代码如下:
%函数功能:本函数将利用MD5函数产生随机的无碰撞的像素选择策略
%输入格式举例:[row,col]=hashreplacement(test,60,1983,421,1121);
%test=zeros(8);
%[row,col]=hashreplacement(test,60,1983,421,1121);
% for i=1:60
% test(row(i),col(i))=i;
% end
%test
%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);
v=mod(v+md52num(md5(u+key1)),Y);
u=mod(u+md52num(md5(v+key2)),X);
v=mod(v+md52num(md5(u+key3)),Y);
j(i)=v*X+u+1;
col(i)=mod(j(i),Y);
row(i)=j(i)/Y;
%原来为uint8,
%在matlab7.1中uint8是四舍五入取整如:uint8(1.75)=2,uint8(1.25)=1,uint8(0.9)=1
%在matlab6.5中uint8是向0方向取整 如:uint8(1.75)=1,uint8(1.25)=1,uint8(0.9)=0
%所以使用fix向零取整函数代替uint8
row(i)=double(fix(row(i)))+1;
if col(i)==0
col(i)=Y;
row(i)=row(i)-1;
end
end
%hashplacement的子函数用以将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
%md5函数,相应的.dll文件可从mathworks网站下载
但当我使用该函数生成随机置换行和列时,就会在调用md5函数时出错,
例:hashreplacement(zeros(8),60,1983,421,1121);
出错信息:
??? Undefined command/function 'md5dll'.

Error in ==> md5 at 2
y = md5dll(M);

Error in ==> hashreplacement at 27
v=mod(v+md52num(md5(u+key1)),Y);

请大家帮我分析一下,到底应该怎么修改md5函数,或是怎么使用md5dll文件?谢谢。请知道的同学帮我解答,谢谢。如果不能公开,可以邮箱联系,[email protected]

函数原型:
int WINAPI icePub_getMD5(char* pBuf, int buffLen,char *strResult)
输入:pBuf 待处理的数据
nLength 待处理数据的长度
输出:strResult MD5结果串,32字节
返回码:

函数原型:
int WINAPI icePub_getMD5FromFile(char *strFilePath,char *strResult)
输入:strFilePath 待MD5的文件名
输出:strResult MD5结果串,32字节
返回码:

VC sample代码:

char buff[1024];
char buff2[1024];

strcpy(buff2,"Walk At Familiar Alley, Pursue Concordand's Footfall, Between Front And Back, What Course To Follow?");

typedef int (WINAPI ICEPUB_GETMD5)( char* pBuf, int buffLen,char *strResult);
ICEPUB_GETMD5 *icePub_getMD5 = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_getMD5=(ICEPUB_GETMD5 *)GetProcAddress(hDLLDrv,"icePub_getMD5");
}
if(icePub_getMD5)
icePub_getMD5(buff2,strlen(buff2),buff);
if(hDLLDrv)
FreeLibrary(hDLLDrv);

AfxMessageBox(buff);

char buff[1024];

typedef int (WINAPI ICEPUB_GETMD5FROMFILE)(char *strFilePath,char *strResult);
ICEPUB_DESDECRYPTIONSTRING *icePub_getMD5FromFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_getMD5FromFile=(ICEPUB_DESDECRYPTIONSTRING *)GetProcAddress(hDLLDrv,"icePub_getMD5FromFile");
}
if(icePub_getMD5FromFile)
icePub_getMD5FromFile("D:\\icePubDLL.dll",buff);
if(hDLLDrv)
FreeLibrary(hDLLDrv);

AfxMessageBox(buff);

参考资料:icePubDLL.dll百度之即可

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-31
你自己的程序和所调用的程序应该放在同一个文件夹(在matlab7.5以下的版本,matlab7.5以上的版本就没有必要了,只需要添加路径就可以了)
第2个回答  2019-10-07
武大的信息隐藏吗
第3个回答  2011-07-26
我这儿有实例,自己对比一下看看,你给的那个问题太长了,希望对你有用,谢谢!!!
实例已经发到你的邮箱了,over~~~本回答被提问者采纳
相似回答