数字信封例程:坏解密

问题描述 投票:0回答:1

我正在加密前端的object并发送带有加密数据的HTTP POST请求。在后端我试图解密这个对象,但它失败了。

测试正在通过但是当集成到实际项目时,这个decrypt方法失败并出现错误:

错误:错误:06065064:数字信封例程:EVP_DecryptFinal_ex:在Decipher.final(crypto.js:158:26)处于错误(本机)时在Object.exports.decrypt.error处解密[解密]

这是相关代码:

export const decrypt = text => {
  if (!text)
    throw Error('Decrypt: Text may not be blank');
  const decipher = crypto.createDecipher(encryptAlgorithm, 
  encryptionKey)
  let decrypted = decipher.update(text, textEncodingHex, 
  textEncodingUtf8)
  decrypted += decipher.final(textEncodingUtf8)
  return decrypted
}

这就是我使用它的方式

authSignInWeb(): any {
  return async (request: any, reply: any) => {
    try {
      let decrytedRequestPayload = request.payload;
      if (process.env.REACT_APP_ENCRYPT) {
        decrytedRequestPayload = JSON.parse(cryptoHelper.decrypt(request.payload))
      }
      ...
    } catch (error) {
       reply(error);
      ...
    }
  };
};
javascript hapijs cryptojs
1个回答
0
投票

通过文档和其他在线资源后,我设法解决了这个问题。造成这种失败的原因是HapiJs获取传入的有效负载,对其进行解析,然后将其作为Javascript对象传递给authSignInWeb(),其中实际有效负载作为代表我的对象的关键。

为了解决这个问题,我必须在前端加密数据,手动创建一个对象并分配加密信息。然后在后端访问对象的有效负载密钥。

在代码中:

前端是这样的:

let encryptedData = {};
if (process.env.REACT_APP_ENCRYPT) {
  encryptedData.data = Crypt.encrypt(JSON.stringify(requestBody))
}

然后在后端(authSignInWeb()内)做:

 let userAuthData = request.payload;
 if (process.env.REACT_APP_ENCRYPT) {
   userAuthData = JSON.parse(cryptoHelper.decrypt(userAuthData.data))
 }
© www.soinside.com 2019 - 2024. All rights reserved.