首页 > 解决方案 > 无法在 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 ...推出我自己的散列算法?

标签: scalaslackhmacscala.jsscala-java-interop

解决方案


有一个项目倾向于这样做(不确定质量)https://github.com/fluencelabs/crypto。它在内部使用 CryptoJS(也许直接使用它会更简单或更稳定)。但是你仍然可以看到它是如何在 fluencelabs/crypto 中使用的。


推荐阅读