【问题标题】:Can't perform HmacSHA256 hashing in Scala.js无法在 Scala.js 中执行 HmacSHA256 散列
【发布时间】:2020-05-04 21:54:00
【问题描述】:

我正在尝试实现一种方法来计算和验证verifying a slack request 的 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 ...推出我自己的哈希算法?

【问题讨论】:

  • 如果你对 js 依赖感到满意,CryptoJS 可以做到。

标签: scala slack hmac scala.js scala-java-interop


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多