【问题标题】:get double hash result like js-sha1 library in c#在 c# 中获得类似于 js-sha1 库的双哈希结果
【发布时间】:2018-11-29 09:49:54
【问题描述】:

我尝试使用 SHA1 算法对双精度 (1529480427715.5532) 进行散列,并且我在 c# 中有此散列:

  • 以字符串格式使用:“3e8f41233f90a85f9963afaa571ba76afb8bb08d”
  • 以双重格式使用:“c880857c399c7​​b9cc9c6395197e700543c400b17”

但实际上我想得到这个哈希“da39a3ee5e6b4b0d3255bfef95601890afd80709”,就像我使用js-sha1库时一样。

【问题讨论】:

  • js-sha1中的哈希“da39a3e...”是空字符串/空数组的哈希。你确定你想要那个哈希吗?
  • 在我看来,您没有正确地从 javascript 端散列您的 double。但是为什么你首先要散列一个双精度数呢?双打 do 有精度错误,所以我想知道你的用例是什么
  • 我在哈希上生成的一些代码。我已经看到提到的 js 库生成它。您可以使用该库(js-sha1)重新生成它
  • 发布您使用的代码。正如@xanatos js-sha1 提到的那样,not 支持数字,您必须先将其转换为字符串或字节数组....

标签: c# hash double sha1


【解决方案1】:

给定将this 代码从float64(即C# 中的double)转换为Uint8array,您可以:

// c880857c399c7b9cc9c6395197e700543c400b17
var hash = sha1(convertTypedArray(new Float64Array([1529480427715.5532]), Uint8Array));

甚至更短,不使用该链接,因为sha1 接受ArrayBuffer 作为参数:

var hash = sha1(new Float64Array([1529480427715.5532]).buffer);

请注意,sha1 仅接受某些类型的输入,number 不是其中之一。

从库的examples 看来,支持字符串ArrayUint8ArrayArrayBuffer

正如@Freggar 所写,

// da39a3ee5e6b4b0d3255bfef95601890afd80709
var hash = sha1('');

并且,使用字符串:

// 3e8f41233f90a85f9963afaa571ba76afb8bb08d
var hash = sha1('1529480427715.5532');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    相关资源
    最近更新 更多