微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js 中的 AES 加密,用于 OpayoSage Pay支付形式的 Crypt 字段

如何解决Node.js 中的 AES 加密,用于 OpayoSage Pay支付形式的 Crypt 字段

我相信我已经遵循了加密表单数据的规范,以便将其发送到支付处理器 Opayo(以前称为 Sage Pay)。但是,我收到一个错误,似乎无法读取加密。

Crypt 字段的规范(VPSProtocol 4.00 版),https://developer-eu.elavon.com/docs/opayo-forms/api-reference/crypt-field

Crypt 字段应包含纯文本形式的交易信息,如 Name=Value 字段,以“&”字符分隔。
该字符串必须使用 AES(块大小 128 位)在 CBC 模式下使用 PKCS#5 填充进行加密。
使用提供的密码作为密钥和初始化向量,并将结果编码为十六进制(确保字母为大写)。
在编码结果的开头添加“@”符号。

生成 Crypt 字段值的实现:

function encodeAES (text,key,iv) {
    const cipher = crypto.createCipheriv('aes-128-cbc',new Buffer(key),new Buffer(iv));

    const encrypted = Buffer.concat([
        cipher.update(text),cipher.final()
    ]);
    
    return encrypted.toString('hex').toupperCase();
}

function createHash (paramsstring) {
  return '@' + encodeAES(paramsstring,OPAYO_FORM_API_PASSWORD,OPAYO_FORM_API_PASSWORD);
}

const crypt = createHash("Name=Value...");

当表单与所有其他必填字段一起发布时,我得到 error 5080。测试门户中未记录任何交易。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。