nodejs 微信支付如何加密敏感信息?

目前正在做商家转账到零钱,user_name需要加密;未加密时,能正常调用接口,加密后,报错了

{ code: 'PARAM_ERROR', message: '平台证书序列号Wechatpay-Serial错误' }

这是加密方法

sensitiveInformationDecrypt(str, padding = crypto.constants.RSA_PKCS1_OAEP_PADDING) {
const decrypted = crypto.privateDecrypt({ 
  key:Buffer.from('xxxxxxxx'), 
  padding, oaepHash: 'sha1' }, 
  Buffer.from(str, 'base64')
);
return decrypted.toString('utf8');
}
阅读 823
avatarAI BotBETA

首先,确保你的加密和解密方法都是正确的,并且密钥是正确的。在微信支付的商家转账到零钱接口中,需要加密的参数包括 mch_idnonce_strserialsignencrypt_typedata_list

在你的问题中,报错信息是 '平台证书序列号Wechatpay-Serial错误',这意味着你可能在解密过程中使用了错误的序列号。你需要确保你在解密时使用的序列号与加密时使用的序列号一致。

此外,你需要确保你的 Node.js 版本支持你使用的加密和解密方法。你可能需要更新你的 Node.js 版本,或者使用一个不同的库来进行加密和解密。

在解密时,你需要将加密的字符串转换为 Buffer,然后使用你的私钥进行解密。这可能需要一些调整。

以下是一个基本的解密示例:

const crypto = require('crypto');

function sensitiveInformationDecrypt(encryptedStr, privateKey) {
  const buffer = Buffer.from(encryptedStr, 'base64');
  const decipher = crypto.createDecipheriv('AES-256-CBC', privateKey, Buffer.alloc(16));
  const decrypted = decipher.update(buffer, 'utf8', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

在上述代码中,privateKey 是你的私钥,它是一个 Buffer。你需要确保你的私钥是正确的,并且与加密时使用的私钥一致。

请注意,这只是一个基本的示例,你可能需要根据你的具体需求进行修改。例如,你可能需要使用不同的加密算法或密钥长度。此外,你可能还需要处理加密和解密过程中的错误。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题