【问题标题】:crypto module is not working in IBM API Connect加密模块在 IBM API Connect 中不起作用
【发布时间】:2021-01-31 19:51:01
【问题描述】:

在 IBM API Connect 中,我尝试在 IBM API Connect 网关脚本中使用“加密”模块。当我测试gatewascript是否支持加密模块时,我得到如下响应

Gatewayscript 中的代码:

var crypto = require('crypto');
session.output.write(crypto);

输出:

*{
  "getHashes": {},
  "getCiphers": {},
  "createHash": {},
  "createHmac": {},
  "createSign": {},
  "createVerify": {},
  "createCipheriv": {},
  "createDecipheriv": {},
  "randomBytes": {}
}*

但是当我尝试使用它时,我得到了 500 Internal Server Error:

代码:

var crypto = require('crypto');
var key = "Alice";

var hmac = crypto.createHmac('hmac-sha256', key);
var input = "This is plaintext to hash";
var result = hmac.update(input).digest('base64');

session.output.write(result);

输出:

  {
      "httpCode": "500",
      "httpMessage": "Internal Server Error",
      "moreInformation": "Internal Error"
    }

不知道哪里出了问题。我正在从 IBM 网站复制粘贴确切的示例。这里是对crypto的引用:https://www.ibm.com/support/knowledgecenter/SS9H2Y_7.7.0/com.ibm.dp.doc/crypto_js.html#crypto.createHmac

【问题讨论】:

    标签: websphere apiconnect


    【解决方案1】:

    通过使用var key = "Alice";,您可以告诉 datapower 使用以别名“Alice”存储的共享密钥。

    如果你想使用'Alice'字符串,那么你需要使用像var key = new Buffer("Alice");这样的缓冲区

    尽管如此,它还是无法工作,因为 HMAC 要求 hmac-sha1 使用 160 位密钥。 你可以这样生成它

    $ dd if=/dev/random count=20 bs=1 | xxd -ps
    a73e3406e7dcc5fc168d9ae9954ec6e0d85e4444
    

    20 为 20 字节(20x8 位=160 位)

    如果您想将其存储在共享对象中,您可以按照此处的描述进行操作:http://rcbj.net/blog01/2012/03/17/generating-and-uploading-a-shared-key-symmetric-key-to-datapower-appliances/

    将此命令生成的十六进制字符串放入名为 secret.key 的文件中。 将密钥上传到设备上的 cert:/// 目录。 导航到对象->加密配置->加密共享密钥。 单击添加。 输入共享密钥的名称。 从下拉列表中,选择刚才上传的 secret.key 文件。 单击应用。 如果没有显示错误,则密钥已成功读取。 点击保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      相关资源
      最近更新 更多