数字信封例程:Bad Decrypt
Digital Envelope Routines: Bad Decrypt
我正在前端加密 object
并发送带有加密数据的 HTTP POST 请求。在后端,我试图解密这个对象,但它失败了。
测试通过,但当集成到实际项目中时,此 decrypt
方法失败并出现错误:
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt at Error (native) at Decipher.final (crypto.js:158:26) at Object.exports.decrypt.error [as decrypt]
相关代码如下:
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);
...
}
};
};
在查阅文档和其他在线资源后,我设法解决了这个问题。失败的原因是 HapiJs 获取传入的有效负载,对其进行解析,并将其作为 Javascript 对象传递给 authSignInWeb()
,实际有效负载作为它代表我创建的对象中的键。
为了解决这个问题,我不得不在前端加密数据,手动创建一个对象并分配加密信息。然后在后端访问对象的payload键。
在代码中:
前端是这样的:
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))
}
我正在前端加密 object
并发送带有加密数据的 HTTP POST 请求。在后端,我试图解密这个对象,但它失败了。
测试通过,但当集成到实际项目中时,此 decrypt
方法失败并出现错误:
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt at Error (native) at Decipher.final (crypto.js:158:26) at Object.exports.decrypt.error [as decrypt]
相关代码如下:
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);
...
}
};
};
在查阅文档和其他在线资源后,我设法解决了这个问题。失败的原因是 HapiJs 获取传入的有效负载,对其进行解析,并将其作为 Javascript 对象传递给 authSignInWeb()
,实际有效负载作为它代表我创建的对象中的键。
为了解决这个问题,我不得不在前端加密数据,手动创建一个对象并分配加密信息。然后在后端访问对象的payload键。
在代码中:
前端是这样的:
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))
}