?? md5.m
字號(hào):
%%%%%%%%%%%%%%%%%
% MD5 algorithm %
%%%%%%%%%%%%%%%%%
% opening the file being ciphered
f1=fopen(text,'r+');
[Data1,count1]=fread(f1);
% Appending length in bits
b=count1;
b=b*8;
b=de2bi(b,64);
len=[b(1:32)' b(33:64)'];
b=[b(1:8); b(9:16); b(17:24); b(25:32);b(33:40);b(41:48);b(49:56);b(57:64)];
b=bi2de(b);
cnt=fwrite(f1,b);
% Add text length to file
a=mod(count1+8,64);
if a~=0
dif=64-a-1;
ss=[1 zeros(1,dif)];
cnt=fwrite(f1,ss);
end
fclose(f1);
%compute T
T=[];
for i=1:64
t(i)=fix(4294967296*abs(sin(i)));
end
for i=1:64
T(:,i)=de2bi(t(i),32)';
end
f1=fopen(text);
[Data1,count2]=fread(f1);
fclose(f1);
f1=fopen(text);
% Reading whole message into 512 bits-blocked array.
for i=1:count2/64
data=fread(f1,64);
data=de2bi(data,8);
data=data';
block(:,i)=data(:);
end
fclose(f1);
% Initializing MD Buffer
A='67452301';
B='efcdab89';
C='98badcfe';
D='10325476';
%convert MD buffers to binary
AA = de2bi(hex2dec(A),32);
AA=AA';
BB = de2bi(hex2dec(B),32);
BB=BB';
CC = de2bi(hex2dec(C),32);
CC=CC';
DD = de2bi(hex2dec(D),32);
DD=DD';
A=AA;
B=BB;
C=CC;
D=DD;
% Process each 16-word (512 bits) block
ciphertext=[];
for i=1:count2/64
w=1;
% Processing block in 16-Word
for j=1:16
X(:,j)=block(w:w+31,i);
w=w+32;
end
% a = b + ((a + function(b,c,d) + X[k] + T[i]) <<< s)
% Round 1 uses F function.
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ffunction(BB,CC,DD)),X(:,1)),T(:,1)),7)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Ffunction(AA,BB,CC)),X(:,2)),T(:,2)),12)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ffunction(DD,AA,BB)),X(:,3)),T(:,3)),17)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ffunction(CC,DD,AA)),X(:,4)),T(:,4)),22)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ffunction(BB,CC,DD)),X(:,5)),T(:,5)),7)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Ffunction(AA,BB,CC)),X(:,6)),T(:,6)),12)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ffunction(DD,AA,BB)),X(:,7)),T(:,7)),17)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ffunction(CC,DD,AA)),X(:,8)),T(:,8)),22)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ffunction(BB,CC,DD)),X(:,9)),T(:,9)),7)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Ffunction(AA,BB,CC)),X(:,10)),T(:,10)),12)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ffunction(DD,AA,BB)),X(:,11)),T(:,11)),17)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ffunction(CC,DD,AA)),X(:,12)),T(:,12)),22)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ffunction(BB,CC,DD)),X(:,13)),T(:,13)),7)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Ffunction(AA,BB,CC)),X(:,14)),T(:,14)),12)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ffunction(DD,AA,BB)),X(:,15)),T(:,15)),17)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ffunction(CC,DD,AA)),X(:,16)),T(:,16)),22)));
% Round 2 uses G function.
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Gfunction(BB,CC,DD)),X(:,2)),T(:,17)),5)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Gfunction(AA,BB,CC)),X(:,7)),T(:,18)),9)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Gfunction(DD,AA,BB)),X(:,12)),T(:,19)),14)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Gfunction(CC,DD,AA)),X(:,1)),T(:,20)),20)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Gfunction(BB,CC,DD)),X(:,6)),T(:,21)),5)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Gfunction(AA,BB,CC)),X(:,11)),T(:,22)),9)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Gfunction(DD,AA,BB)),X(:,16)),T(:,23)),14)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Gfunction(CC,DD,AA)),X(:,5)),T(:,24)),20)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Gfunction(BB,CC,DD)),X(:,10)),T(:,25)),5)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Gfunction(AA,BB,CC)),X(:,15)),T(:,26)),9)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Gfunction(DD,AA,BB)),X(:,4)),T(:,27)),14)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Gfunction(CC,DD,AA)),X(:,9)),T(:,28)),20)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Gfunction(BB,CC,DD)),X(:,14)),T(:,29)),5)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Gfunction(AA,BB,CC)),X(:,3)),T(:,30)),9)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Gfunction(DD,AA,BB)),X(:,8)),T(:,31)),14)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Gfunction(CC,DD,AA)),X(:,13)),T(:,32)),20)));
% Round 3 uses H function.
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Hfunction(BB,CC,DD)),X(:,6)),T(:,33)),4)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Hfunction(AA,BB,CC)),X(:,9)),T(:,34)),11)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Hfunction(DD,AA,BB)),X(:,12)),T(:,35)),16)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Hfunction(CC,DD,AA)),X(:,15)),T(:,36)),23)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(A,Hfunction(BB,CC,DD)),X(:,2)),T(:,37)),4)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Hfunction(AA,BB,CC)),X(:,5)),T(:,38)),11)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Hfunction(DD,AA,BB)),X(:,8)),T(:,39)),16)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Hfunction(CC,DD,AA)),X(:,11)),T(:,40)),23)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Hfunction(BB,CC,DD)),X(:,14)),T(:,41)),4)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Hfunction(AA,BB,CC)),X(:,1)),T(:,42)),11)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Hfunction(DD,AA,BB)),X(:,4)),T(:,43)),16)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Hfunction(CC,DD,AA)),X(:,7)),T(:,44)),23)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Hfunction(BB,CC,DD)),X(:,10)),T(:,45)),4)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Hfunction(AA,BB,CC)),X(:,13)),T(:,46)),11)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Hfunction(DD,AA,BB)),X(:,16)),T(:,47)),16)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Hfunction(CC,DD,AA)),X(:,3)),T(:,48)),23)));
% Round 4 uses I function.
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ifunction(BB,CC,DD)),X(:,1)),T(:,49)),6)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Ifunction(AA,BB,CC)),X(:,8)),T(:,50)),10)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ifunction(DD,AA,BB)),X(:,15)),T(:,51)),15)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ifunction(CC,DD,AA)),X(:,6)),T(:,52)),21)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ifunction(BB,CC,DD)),X(:,13)),T(:,53)),6)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Ifunction(AA,BB,CC)),X(:,4)),T(:,54)),10)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ifunction(DD,AA,BB)),X(:,11)),T(:,55)),15)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ifunction(CC,DD,AA)),X(:,2)),T(:,56)),21)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ifunction(BB,CC,DD)),X(:,9)),T(:,57)),6)));
DD=binplus(AA,(shiftleft(binplus(binplus(binplus(DD,Ifunction(AA,BB,CC)),X(:,16)),T(:,58)),10)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ifunction(DD,AA,BB)),X(:,7)),T(:,59)),15)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ifunction(CC,DD,AA)),X(:,14)),T(:,60)),21)));
AA=binplus(BB,(shiftleft(binplus(binplus(binplus(AA,Ifunction(BB,CC,DD)),X(:,5)),T(:,61)),6)));
DD=binplus(A,(shiftleft(binplus(binplus(binplus(DD,Ifunction(AA,BB,CC)),X(:,12)),T(:,62)),10)));
CC=binplus(DD,(shiftleft(binplus(binplus(binplus(CC,Ifunction(DD,AA,BB)),X(:,3)),T(:,63)),15)));
BB=binplus(CC,(shiftleft(binplus(binplus(binplus(BB,Ifunction(CC,DD,AA)),X(:,10)),T(:,64)),21)));
% The message digest produced as output is A, B, C, D
A =binplus(A,AA);
B =binplus(B,BB);
C =binplus(C,CC);
D =binplus(D,DD);
end
ciphertext=[A' B' C' D'];
Len=length(ciphertext);
dectext=[];
for i=1:8:Len
bindata=ciphertext(i:i+7);
decdata=bi2de(bindata);
dectext=[dectext decdata];
end
fid=fopen('cipher text.txt','w');
o=fwrite(fid,dectext);
fclose(fid);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -