您现在的位置是:首页 > 电脑 > 

如何使用CryptoJS成功解密由ode.js中的OpenSSL生成的AES

2025-07-17 15:09:56
如何使用CryptoJS成功解密由ode.js中的OpenSSL生成的AES 上下文我有一个ode.js AWS Lambda函数,它充当自定义授权者,并由AWS API Gateway触发,该函数应该从Authorization标头中获取令牌,该标头是AES-256加密的JSO,然后解密它使用CryptoJS和一个秘密密码短语。仅供参考,令牌不是JWT。我已经关注CryptoJS文档,但

如何使用CryptoJS成功解密由ode.js中的OpenSSL生成的AES

上下文

我有一个ode.js AWS Lambda函数,它充当自定义授权者,并由AWS API Gateway触发,该函数应该从Authorization标头中获取令牌,该标头是AES-256加密的JSO,然后解密它使用CryptoJS和一个秘密密码短语。仅供参考,令牌不是JWT。我已经关注CryptoJS文档,但是它没有用。我已经阅读了数十篇文章和文章,对于我一直不到能够尝试像我这样的简单方法的人感到非常惊讶。

步骤和代码

1)我有一个名为token.json的文件,其中包含一个字符串化的JSO对象:

"{"user_id":1,"name":"user","time":"2019-09-27 1:58:22","env":"dev"}"

2)以下CryptoJS示例,在我正在执行的终端中:openssl enc -aes-256-cbc -in token.json -out encrypted-json-token -pass pass:"password" -e -A -base64

我正在使用-A选项来获取一个单行字符串。根据openssl enc --help

-A与-[base64 | a]一起使用以将base64缓冲区指定为单行

)我要获取该输出,加密的令牌,并将其作为由AWS API Gateway解析的HTTP请求中Authorization标头的值发送,该请求将获得该标头并将其传递给我的Lambda函数。

4)在Lambda函数中:

ct AES = require('crypto-js/aes');
ct Utf8 = require('crypto-js/enc-utf8');

authenticate = function authenticate(event, context, callback) {
...
  try {
    ct token = event.authorizationToken;
    ct decryptedToken = AES.decrypt(token, 'password').toString(Utf8);
    ct parsedToken = JSO.parse(decryptedToken);
  }
  catch(error){
  // log error
  }
...
}

解密的结果是一个空字符串,因此解析为JSO失败。

最后注

我正在调用.toString(Utf8),因为根据this和this,解密操作的输出是字数组对象,我需要将其恢复为原始字符串形式,即应该是字符串化的JSO令牌。另外,我正在使用无服务器脱机插件在本地模拟API网关来测试所有这一切。

回答如下:

TL; DR:使用-K标志传递编码为十六进制的实际AES密钥。

如果仔细阅读documentation for openssl enc,您会发现openssl enc-pass)和-k标志之间存在差异-第一个实际上是密码,第二个是实际密钥。

[如果使用-K,则实际上是在传递一个任意字符串密码,该密码通过(过时和不安全的)KDF -pass输入。如果使用EVP_KDF,则可以将真实的AES密钥作为十六进制字符串传递。

由于-K不安全,所以我建议后者。

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/diannao/880962.html

相关标签:无
上传时间: 2024-04-17 07:09:49
留言与评论(共有 14 条评论)
本站网友 稻香湖景酒店
4分钟前 发表
则可以将真实的AES密钥作为十六进制字符串传递
本站网友 0571区号
24分钟前 发表
"name"
本站网友 天元金业
26分钟前 发表
并由AWS API Gateway触发
本站网友 个人住房房产税
29分钟前 发表
在我正在执行的终端中:openssl enc -aes-256-cbc -in token.json -out encrypted-json-token -pass pass
本站网友 淑香门第
15分钟前 发表
令牌不是JWT
本站网友 大连餐饮网
6分钟前 发表
"password" -e -A -base64我正在使用-A选项来获取一个单行字符串
本站网友 show才网
16分钟前 发表
该函数应该从Authorization标头中获取令牌
本站网友 芦荟怎么吃
28分钟前 发表
"name"
本站网友 cd3
26分钟前 发表
解密操作的输出是字数组对象
本站网友 品牌优惠
24分钟前 发表
58
本站网友 大蒜价格网
29分钟前 发表
对于我一直不到能够尝试像我这样的简单方法的人感到非常惊讶
本站网友 ss53ss
26分钟前 发表
由于-K不安全
本站网友 邮轮码头
10分钟前 发表
callback) { ... try { ct token = event.authorizationToken; ct decryptedToken = AES.decrypt(token