我正在尝试实现SHA-1代码,但是当我试图计算32位长度的80个单词时,我得到了一些奇怪的输出,这是伪代码。
message='Hello';
message=dec2bin(message,8);
message=reshape(message,1,40);
message(end:end+1)=0;
a=repmat('0', 1, 409);
message=strcat(message,a);
lengthh=length(dec2bin(40,8));
a=repmat('0', 1, 64-lengthh);
b=dec2bin(40,8);
message=strcat(message,a,b);
k=1;
s='';
M=repmat(s,16,32);
W= repmat(s,80,32);
for i=1:32:512
M(k,:)=message(i:i+31);
k=k+1;
end
Hash(1,:) =dec2bin(hex2dec('67452301'),32);
Hash(2,:) = dec2bin(hex2dec('efcdab89'),32);
Hash(3,:) = dec2bin(hex2dec('98badcfe'),32);
Hash(4,:) = dec2bin(hex2dec('10325476'),32);
Hash(5,:) =dec2bin(hex2dec('c3d2e1f0'),32);
W(1:16,:)=M(1:16,:);
for i=17:80
W(i,:)= bitxor(uint32(W(i-3,:)),uint32(W(i-8,:)),'uint32');
end输出为
val =
00000111110111100000101110111100
00101000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000101000
00000000000000000000000000000000
00000000000000000000000000101000
00000000000000000000000000101000问题从第17行开始,一些奇怪的符号开始出现,有人能帮忙吗?
发布于 2018-02-12 06:05:50
我建议您避免自己实现散列算法;这可能会很痛苦,尤其是在Matlab中。取而代之的是内置的Java散列框架,它具有闪电般的速度和防弹能力:
% Your message to be hashed...
message = 'Hello';
% Convert the message into a byte array...
message_bytes = getByteStreamFromArray(double(message));
% Create an instance of a Java MessageDigest with the desired algorithm:
md = java.security.MessageDigest.getInstance('SHA-1');
md.update(message_bytes);
% Properly format the computed hash as an hexadecimal string:
hash = reshape(dec2hex(typecast(md.digest(),'uint8'))',1,[]);输出将是F7FF9E8B7BB2E09B70935A5D785E0CC5D9D0ABF0。例如,您可以使用this online application验证结果的正确性。
https://stackoverflow.com/questions/48736602
复制相似问题