javascript - typescript crypto-js 如何使用 sha256 算法和密钥对数据进行哈希处理
问题描述
我正在使用 typescript 版本 3.7.2 使用 crypto-js 加密数据。
算法 - sha256
但是我的代码生成了错误的散列数据。
该代码工作正常,无需使用任何密钥来散列数据,例如
CryptoJS.SHA256(message).toString(CryptoJS.enc.Hex)
但是当我使用密钥时,它正在做错误的散列
这是完整的代码。希望你能帮忙。先感谢您
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生成的哈希值
e236e8fe62c54546b85dede32c432d4c73c27157840a8ba67cfc09270b53064a
ie在线网站生成的和支付网关发送的哈希值匹配,这意味着我们的代码有问题。谢谢
解决方案
您期望计算 SHA256 HMAC,但实际上是在计算 message 的 SHA256 哈希值order_id + "|" + payment_id
。secret
传递给 SHA256 函数的参数被忽略。
替换CryptoJS.SHA256
为CryptoJS.HmacSHA256
,您的代码将按预期工作。
推荐阅读
- unity3d - 如何删除 Unity 3d 右上角的 Gizmo 透视图标?
- mysql - MySQL自动分配外键ID
- java - 如何将 DER 编码的 OCTET 字符串用于 X509Certificate::getExtensionValue(oid) 返回的扩展值
- c++ - `std::call_once` 在 Windows 上的 Clang 12 上总是出现段错误(使用 libstdc++ 时)
- pyspark - 如何将字符串从 Databricks 推送到 Snowflake 中的时间戳
- ios - 在上传之前如何检查数据文件的大小(Flutter)
- r - R:与 R 中的 glm 和 mle2 包不同的结果
- java - firebase 云消息在服务器上不起作用
- python-3.x - 使用python获取机器登录用户名
- c - float 到 int 的隐式转换和价值损失的可能性