如何在 javascript 中为数据传输生成 HMAC-SHA-256 登录?

我有一个 Angular 项目,我必须在其中实现数据传输支付。但我无法生成付款标志。


我正在按照此链接上给出的过程(在此处输入链接描述)生成符号。


但我无法实现它。


我正在使用角度库 crypto-js 生成 HMAC-SHA-256 签名字符串。


这是我的javascript代码。


const merchantId = 'xxxxxxx';

const refNo = '1234567890';

const amount = 0;

const currency = 'CHF';

const theme = 'DT2015';

const paymentmethod = 'VIS';


const stringSs = merchantId+amount+currency+refNo;


const base = 16;

// My Hmac Key

const s = 'fa3d0ea1772cf21e53158283e4f123ebf1eb1ccfb15619e2fc91ee6860a2e5e48409e902b610ce5dc6f7f77fab8affb60d69b2a7aa9acf56723d868d36ab3f32';


// Step 1: Code to generate hex to byte of hmac key

const a = s.replace(/../g, '$&_').slice (0, -1).split ('_').map ((x) => parseInt (x, base));


//  Step 3: Sign the string with HMAC-SHA-256 together with your HMAC key

const signedString = HmacSHA256(a, stringSs);


// Step 4: Translate the signature from byte to hex format

const signString = enc.Hex.stringify(signedString);

您能帮我解决这个问题,以建议我做错了什么或可以通过什么方式实现。


慕沐林林
浏览 74回答 2
2回答

HUWWW

你可以用加密来做到这一点(不需要安装额外的库)// Typescriptimport * as crypto from 'crypto';function signKey (clientKey: string, msg: string) {    const key = new Buffer(clientKey, 'hex');    return crypto.createHmac('sha256', key).update(msg).digest('hex');}// Javascriptconst crypto = require('crypto')function signKey (clientKey, msg) {    const key = new Buffer(clientKey, 'hex');    return crypto.createHmac('sha256', key).update(msg).digest('hex');}signKey(s, stringSs)

蝴蝶不菲

要按要求回答 crypto-js 的问题(请参阅https://github.com/brix/crypto-js),以下内容可以解决问题:// Javascript; example from datatrans documentation using a random keystringSs ='3000017692850CHF91827364';key='1ca12d7c0629194a9f9d0dbbc957709dd3aed385925b077e726813f0b452de6a38256abd1116138d21754cfb33964b6b1aaa375b74d3580fcda916898f553c92';expectedSign='d7dee9ae1e542bc02bcb063a3dd3673871b2e43ccb4c230f26e8b85d14e25901';signedString = CryptoJS.HmacSHA256(stringSs, CryptoJS.enc.Hex.parse(key));resultSign = CryptoJS.enc.Hex.stringify(signedString);// now resultSign == expectedSign is true :-)忍者神龟的方法几乎是正确的,除了第 1 步,十六进制到字节。改用 Crypto-JS 的内置函数,一切都按预期工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript