首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试实现SHA-1

尝试实现SHA-1
EN

Stack Overflow用户
提问于 2018-02-12 05:21:40
回答 1查看 155关注 0票数 0

我正在尝试实现SHA-1代码,但是当我试图计算32位长度的80个单词时,我得到了一些奇怪的输出,这是伪代码。

代码语言:javascript
复制
 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 =

代码语言:javascript
复制
   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行开始,一些奇怪的符号开始出现,有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-12 06:05:50

我建议您避免自己实现散列算法;这可能会很痛苦,尤其是在Matlab中。取而代之的是内置的Java散列框架,它具有闪电般的速度和防弹能力:

代码语言:javascript
复制
% 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验证结果的正确性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48736602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档