数字信封例程:坏解密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字信封例程:坏解密相关的知识,希望对你有一定的参考价值。
我正在加密前端的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);
...
}
};
};
答案
通过文档和其他在线资源后,我设法解决了这个问题。造成这种失败的原因是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))
}
以上是关于数字信封例程:坏解密的主要内容,如果未能解决你的问题,请参考以下文章