首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java语言在Matlab中计算MD5散列(RFC1321 conform)

用Java语言在Matlab中计算MD5散列(RFC1321 conform)
EN

Stack Overflow用户
提问于 2012-08-27 18:43:03
回答 3查看 2.7K关注 0票数 5

我想在MATLAB中使用Java-Security-Implementations来计算MD5 (或其他)文件散列(RFC 1321 conform)。因此我编写了代码

代码语言:javascript
复制
mddigest=java.security.MessageDigest.getInstance('MD5');
filestream=java.io.FileInputStream(java.io.File(filename));
digestream=java.security.DigestInputStream(filestream,mddigest);
md5hash=reshape(dec2hex(typecast(mddigest.digest,'uint8')),1,[])

而且程序运行得很好。不知何故,结果与给定的工具不同。

也许文件编码有问题?难道MATLAB不应该在内部解决这个问题吗?

我想重现这些结果,其中一个是通过md5sum获得的(在linux上),与来自HashCalc (Windows)的结果相当。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-31 20:18:30

有两个问题:

  1. ,你不读这个文件。
  2. 在重塑矩阵之前,必须先对其进行转置。

下面的代码可以工作:

代码语言:javascript
复制
mddigest   = java.security.MessageDigest.getInstance('MD5'); 
filestream = java.io.FileInputStream(java.io.File(filename)); 
digestream = java.security.DigestInputStream(filestream,mddigest);

while(digestream.read() ~= -1) end

md5hash=reshape(dec2hex(typecast(mddigest.digest(),'uint8'))',1,[]);

**/!**编辑:p.vitzliputzli回答了一个应该使用的very much faster solution,而不是这个。

票数 6
EN

Stack Overflow用户

发布于 2016-11-08 18:00:11

斯蒂芬的解决方案是有效的,但由于MATLAB的限制,不能为DigestInputStream (或任何其他InputStream)的byte[]方法提供JAVA数组,所以速度非常慢。

然而,我们可以改编Thomas Pornin的solution (丢弃FileInputStream),以达到以下目的:

代码语言:javascript
复制
mddigest   = java.security.MessageDigest.getInstance('MD5'); 

bufsize = 8192;

fid = fopen(filename);

while ~feof(fid)
    [currData,len] = fread(fid, bufsize, '*uint8');       
    if ~isempty(currData)
        mddigest.update(currData, 0, len);
    end
end

fclose(fid);

hash = reshape(dec2hex(typecast(mddigest.digest(),'uint8'))',1,[]);

这个解决方案计算一个713kB文件的哈希大约需要0.018s,而另一个解决方案大约需要31s。

票数 3
EN

Stack Overflow用户

发布于 2012-08-27 18:54:48

你从来没有read from the DigestInputStream过。

这意味着不会对任何字节进行摘要。

您必须读取整个文件(通过DigestInputStream),然后调用digest来获取摘要值。

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

https://stackoverflow.com/questions/12140458

复制
相关文章

相似问题

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