通过Java在Matlab中计算MD5哈希(符合RFC 1321)

Bas*_*ing 5 java hash matlab md5 rfc

我想使用Java-Security-Implementations在MATLAB中计算MD5(或其他)文件哈希值(符合RFC 1321).因此我编码

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,[])
Run Code Online (Sandbox Code Playgroud)

而且例程工作正常.不知何故,结果与给定的工具不同.
也许文件编码有问题?MATLAB内部不应该解决这个问题吗?
我想重现结果,一个是md5sum(在linux上),它与HashCalc(Windows)相同.

小智 6

有两个问题:

  1. 你没有读过这个文件.
  2. 你必须在重塑它之前转置矩阵.

此代码有效:

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,[]);
Run Code Online (Sandbox Code Playgroud)

/!\编辑:p.vitzliputzli回答了一个非常快的解决方案,应该使用它而不是这个解决方案.