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

在 Node js 中使用 Crypto 进行加密抛出错误

如何解决在 Node js 中使用 Crypto 进行加密抛出错误

我正在尝试将客户的信用卡数据加密为 AES 256 CBC 格式,但每当我调用 API 时,我都会收到此错误

RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: ERR_INVALID_ARG_TYPE
    at ServerResponse.writeHead (_http_server.js:259:11)
    at ServerResponse._implicitHeader (_http_server.js:250:8)

这是我的加密代码

const crypto = require('crypto');
const encryptionType = 'aes-256-cbc';
const encryptionEncoding = 'base64';
const bufferEncryption = 'utf8';
export class AesEncryption {
   

  AesKey: string;
  AesIV: string;
  init() {
    this.AesKey = process.env.SECRET as string;
    this.AesIV = process.env.SECRET?.slice(0,16) as string;
  } 

 
    encrypt(jsonObject: Object): string {
        const val = JSON.stringify(jsonObject);
        const key = Buffer.from(this.AesKey,bufferEncryption);
        const iv = Buffer.from(this.AesIV,bufferEncryption);
        const cipher = crypto.createCipheriv(encryptionType,key,iv);
        let encrypted = cipher.update(val,bufferEncryption,encryptionEncoding);
        encrypted += cipher.final(encryptionEncoding);
        return encrypted;
      }

    
}

这是我使用它的地方的代码

public async createPayment(data: IPaymentDetails): Promise<IPaymentDetails> {
    try {
      PaymentService.checkPaymentrequiredFields(data);
      data.encryptedData = new AesEncryption().encrypt(data.card)
      console.log(data.encryptedData)
     ...
headers: {
                    'Content-Type': 'application/json',Cookie: 'PHPSESSID=7hnkto3se3mlsbnht755ok2ak6',},data: JSON.stringify({
                    merchantId: data.merchantId,method: 'Card',id: data.trans_id,encryptedData: data.encryptedData,}),})

每次调用 API 时都会出现上述错误

解决方法

问题是因为 process.env 中的 key 和 iv 没有正确更新,所以它抛出了 undefined。

我必须将 process.env.SECRET 直接传递到函数中,而不是将它们传递到变量中。

成功了。

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