【问题标题】:typescript crypto-js how to hash data using sha256 algorithm and keytypescript crypto-js 如何使用 sha256 算法和密钥对数据进行哈希处理
【发布时间】:2020-02-12 10:21:35
【问题描述】:

我正在使用 typescript 版本 3.7.2 来使用 crypto-js 加密数据。

算法 - sha256

但是我的代码生成了错误的散列数据。

代码运行良好,无需使用任何密钥来散列数据,如

CryptoJS.SHA256(message).toString(CryptoJS.enc.Hex)

但是当我使用 key 时,它的哈希值是错误的

这是完整的代码。 希望你能帮忙。提前谢谢你

    import CryptoJS from 'crypto-js';

    let order_id = 'order_EFph1itQK4z1NQ',
    let payment_id = 'pay_EFph2XRs3vkaB8',

    let generated_signature = CryptoJS.SHA256(order_id + "|" + payment_id, secret).toString(CryptoJS.enc.Hex);
 // secret is some key

生成签名的值(我们的结束)

1a45e3be48f64911d372bcccd9c4dbe7dca9dab716603e4e80c2e55f701bde7a

要比较的哈希值(由支付网关发送)

e236e8fe62c54546b85dede32c432d4c73c27157840a8ba67cfc09270b53064a

在线网站https://www.freeformatter.com/hmac-generator.html#ad-output产生的hash值

e236e8fe62c54546b85dede32c432d4c73c27157840a8ba67cfc09270b53064a

即在线网站生成的和支付网关发送的哈希值匹配,这意味着我们的代码有问题。 谢谢

【问题讨论】:

    标签: javascript typescript encryption cryptography


    【解决方案1】:

    您希望计算 SHA256 HMAC,但实际上您正在计算消息 order_id + "|" + payment_id 的 SHA256 哈希。传递给 SHA256 函数的 secret 参数将被忽略。

    将CryptoJS.SHA256 替换为CryptoJS.HmacSHA256,您的代码将按预期工作。

    【讨论】:

    • 它只是忽略了第二个参数。在 JS 中,即使函数没有声明它们,你也可以传递额外的参数。 SHA256 是一种算法,只需要一个参数 - 要散列的消息。
    • 我不熟悉您使用的库。我注意到它本身不提供类型声明,因此@types/crypto-js 可能与库的最新版本不同步。
    • 官方文档没有提到任何散列函数的第二个参数:cryptojs.gitbook.io/docs/#hashing
    • 好的,我想我看到了一个例子,其中确实使用了 SHA256 的第二个参数,但我再也找不到它了。可能只是我这边的确认偏见。我不知道 JS 只是忽略了附加参数(或忘记了它)。无论如何,如果你找到这样的例子:直接使用HMAC! HMAC 不仅仅是 SHA-256。
    • @Tomasz 如何解决你提到的@types/crypto-js 不同步的问题
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多