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 (将#修改为@)