繁体   English   中英

如何在 Javascript 上正确计算 sha256?

[英]How calculate correctly sha256 on Javascript?

我有问题。 我想使用 javascript 上的图像获取 sha256 hash 但我的 sha256 不正确。

这是我的代码:

<button onclick="onSuccess()">Click me</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<script>

    function onSuccess(imageURI) {
        var hash = CryptoJS.SHA256("imagehere");
        console.log([hash].join(''));
    }
</script>

但结果是:f3ccce7bbec0d8b3b4c6f967b2e405609b7fe691309306271bd41e22ab420aa8,好的代码应该是:bedce3a32c3c2350dbcb220ed21aca171dfe57abdf68bf9ba878c0c447214742

我做错了什么? 错误在哪里?

我不是这方面的专家,但我发现是对另一个线程的评论让我对正在发生的事情有所了解,所以我将其发布在这里:

“真正发生的是 SHA256 返回一个 256 位 hash 值。所以你打印的是那些字节,就好像它们是字符一样,它们各自的字符值都是胡言乱语。在线工具返回给你的是以十六进制格式表示该值。请注意,当 256 位等于 32 字节(您可能认为是 32 个字符)时,(使用该工具)64 字节 IE 64 个字符。那是因为要表示一个整体十六进制格式的字节需要 2 个字符。4 个最高有效位占一个字符,其他较低有效位占另一个。

基本上据我了解,两者都是正确的,但解析方式不同。

您可以在这里看到您发布的后一个是十六进制代码,这不是任何 sha256 散列算法在代码中实际返回的内容。

试试这个在线转换工具,你会发现它和你的第一个工具一样(那个方法会给你回报)。

最后,您应该依赖代码中返回的格式(来自 function 调用),因为即使使用具有相同散列算法的其他库,它也总是正确的。

希望这可以帮助

你只是得到一个 hash 的文本C:\Users\fjolmedo... ,你没有散列具有该名称的文件的内容,因为你的代码没有打开/读取其内容。 也就是说,您实际上需要将磁盘中的文件读入 memory ,然后对其执行 hash 。

由于允许任意(不受信任的)web 页面读取他们喜欢的任何文件的安全隐患,只有当用户使用文件input选择文件或将文件放到该文件上时才授予访问权限

cryptojs 似乎不支持更新的 javascript 功能,例如ArrayBuffer ,因此您的问题需要的代码比您预期的要多,请参阅https://stackoverflow.com/a/33918579/1358308示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM