首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点HmacSHA1种子

节点HmacSHA1种子
EN

Stack Overflow用户
提问于 2019-03-07 07:11:00
回答 1查看 216关注 0票数 0

我正在尝试通过Node发送SOAP请求,与使用WSS保护的服务进行对话。

我需要使用SignedInfo元素对XML响应进行签名,该元素需要将我生成的随机数二进制秘密与从初始令牌请求- PSHA1格式返回的随机数二进制秘密组合在一起。

我已经能够使用Java验证这一点,通过使用以下类(其中秘密是我的客户端nonce,种子是服务器nonce):

https://github.com/apache/wss4j/blob/trunk/ws-security-common/src/main/java/org/apache/wss4j/common/derivedKey/P_SHA1.java#L57

使用以下Java代码:

代码语言:javascript
复制
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec key = new SecretKeySpec(getSharedKey(), "HmacSHA1");
mac.init(key);

String bytesToSign = "<XML_TO_SIGN_GOES_HERE>";

String signature = Base64.encodeBytes(mac.doFinal(bytesToSign.getBytes())); 

我需要在Node项目中做到这一点,我已经研究了Crypto API和许多插件,但我无法生成相同的签名。

如何使用node为HmacSHA1指定种子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-08 06:21:41

我终于做到了,有一个名为psha1 (https://www.npmjs.com/package/psha1)的NPM模块。

使用该库,我创建了以下generateSignature模块,如下所示:

代码语言:javascript
复制
const crypto = require('crypto');
const psha1 = require('psha1');

export const generateSignatureValue = ({
  clientSecret,
  serverSecret,
  messageToSign,
}) => {

  const secretKey =
    psha1(clientSecret, serverSecret, 256);

  const hash =
    crypto
      .createHmac('sha1', Buffer.from(secretKey, 'base64'))
      .update(messageToSign)
      .digest('binary');

  return Buffer
    .from(hash, 'binary')
    .toString('base64');
};

export default generateSignatureValue;

这为我提供了所需的输出:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55033643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档