scala - 无法在 Scala.js 中执行 HmacSHA256 散列
问题描述
我正在尝试实现一种方法来计算和验证 HmacSHA256 签名以验证松弛请求。由于...各种原因...我正在使用scala.js
,因此我无法访问通常的javax.crypto
导入。
来自 slack 关于验证来自 Slack 的签名请求的文档:
- 在您喜欢的编程中实现的 HMAC SHA256 的帮助下,使用 Slack Signing Secret 作为密钥对上述基本字符串进行哈希处理。
- 将此计算的签名与请求上的 X-Slack-Signature 标头进行比较。
好吧,第一步就有问题了。在 scala.js 中,该javax.crypto
包不可用,因此以下内容不起作用:
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
def asHmacSHA256(key: String, baseString: String): Array[Byte] = {
val secretKeySpec = new SecretKeySpec(key.getBytes(), "HmacSHA256")
val hmac = Mac.getInstance("HmacSHA256")
hmac.init(secretKeySpec)
hmac.doFinal(baseString.getBytes())
}
我该如何解决这个问题 - 是否有一个很好的散列库可以与 scala.js 一起使用,还是我必须引入一些js
依赖项,或者我将不得不... gulp ...推出我自己的散列算法?
解决方案
有一个项目倾向于这样做(不确定质量)https://github.com/fluencelabs/crypto。它在内部使用 CryptoJS(也许直接使用它会更简单或更稳定)。但是你仍然可以看到它是如何在 fluencelabs/crypto 中使用的。
推荐阅读
- javascript - 在 POST 请求中获取 webhook 数据,然后在 React 中使用这些数据
- reactjs - 为什么移动浏览器不显示模态视图?
- r - 是否可以使用 bookdown 防止创建 epub 和 pdf 版本的书籍?
- delphi-7 - Indy IdFtp - 网络连接被本地系统中止
- javascript - 在 addEventListener 范围内的 removeListener 不起作用
- random-forest - 使用默认的“randomForest”算法进行分类时,为什么终端节点数与案例数不匹配?
- php - 如何使用OO检查两个哈希是否相等
- google-apps-script - 谷歌表格 - 替换单元格中的第二个字母
- c++ - 动态数组和指针表示法
- php - 在收到字段后尝试将我的 PHP 表单重定向到另一个页面时出现错误