Matlab中SHA-256哈希计算与Java结果不一致,求高效解决方案
Matlab中实现与Java一致的快速SHA-256哈希方法
问题背景
我需要在Matlab中实现一个和Java环境输出一致的SHA-256哈希函数。直接调用Java的方法虽然结果匹配,但速度太慢无法满足需求;使用Matlab自带的DataHash函数计算速度快,可哈希结果和Java的不一致。想了解是否能配置DataHash让结果对齐,或者有没有其他更快的SHA-256计算方法。
原测试代码及结果
以下是对比DataHash和Java哈希结果的测试代码:
% 测试数据 data = 'Hello, world!'; % Matlab中用DataHash计算SHA256哈希 matlabHash = DataHash(data, 'SHA-256', 'hex'); % Java中计算SHA256哈希 javaHash = java.security.MessageDigest.getInstance('SHA-256'); javaHash.update(uint8(data)); javaHash = sprintf('%02x', typecast(javaHash.digest, 'uint8')); % 对比结果 if strcmp(javaHash, matlabHash) disp('两个哈希结果一致。'); else disp('两个哈希结果不一致。'); disp(['Java计算的SHA256哈希: ', javaHash]); disp(['Matlab计算的SHA256哈希: ', matlabHash]); end
运行后输出:
两个哈希结果不一致。 Java计算的SHA256哈希: 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3 Matlab计算的SHA256哈希: 48caecb9db2255f4a10843d2bd36aa928c342566bbb77aee3df8100a30b7f7b4
快速匹配的解决方案
通过调用.NET的SHA256Managed类,既能得到和Java一致的哈希结果,又能保证计算速度。实现代码如下:
sha256hasher = System.Security.Cryptography.SHA256Managed; sha256 = uint8(sha256hasher.ComputeHash(fileBytes)); hash = reshape(dec2hex(sha256)', 1, []);
内容的提问来源于stack exchange,提问作者buch
相关产品推荐
相关产品推荐

