节点 HmacSHA1 种子
Node HmacSHA1 Seed
我正在尝试通过 Node 发送 SOAP 请求,与受 WSS 保护的服务对话。
我需要使用 SignedInfo
元素对 XML 响应进行签名,这需要我将生成的 Nonce 二进制密码与从初始令牌请求返回的 Nonce 二进制密码结合起来 - PSHA1 格式。
我已经能够使用 Java 验证这一点,方法是利用以下 class(其中秘密是我的客户端随机数,种子是服务器随机数):
使用以下 Java 代码:
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 和许多插件,但我无法生成相同的签名。
如何使用节点为 HmacSHA1 指定种子?
我终于成功了,有一个名为 psha1
(https://www.npmjs.com/package/psha1) 的 NPM 模块。
使用该库,我创建了以下 generateSignature 模块,如下所示:
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;
这给了我想要的输出:)
我正在尝试通过 Node 发送 SOAP 请求,与受 WSS 保护的服务对话。
我需要使用 SignedInfo
元素对 XML 响应进行签名,这需要我将生成的 Nonce 二进制密码与从初始令牌请求返回的 Nonce 二进制密码结合起来 - PSHA1 格式。
我已经能够使用 Java 验证这一点,方法是利用以下 class(其中秘密是我的客户端随机数,种子是服务器随机数):
使用以下 Java 代码:
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 和许多插件,但我无法生成相同的签名。
如何使用节点为 HmacSHA1 指定种子?
我终于成功了,有一个名为 psha1
(https://www.npmjs.com/package/psha1) 的 NPM 模块。
使用该库,我创建了以下 generateSignature 模块,如下所示:
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;
这给了我想要的输出:)