encryption - 无法使用 OpenSSL 通过 Javascript 解密 AES 加密文件
问题描述
密文由 Javascript 使用 AES 算法以十六进制格式加密。我首先用 Base64 对其进行编码,然后使用 OpenSSL 对其进行解密。
但是失败了,不知道哪里错了。
我正在使用 Windows 编译版本的 OpenSSL。 http://gnuwin32.sourceforge.net/packages/openssl.htm
命令如下:
openssl enc -aes-128-cbc -a -A -in Cipherbase64.txt -out PlainText.txt -K 31323334353637383930303030303030 -iv 31323334353637383930303030303030 -d
结果:
bad decrypt
6396:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:./crypto/evp/evp_enc.c:461:
密文(十六进制)
4cb4eb49df960e82c14e158ac418ca918736e4fbb730f532fc37d226e0e8b0e3ce0571ce4c146a6a9e037b9b79d8077568326d7fe2a3f9a91d266cfeb8bfac5668f526bc4d5ee1a21cbe85c8efab8cd1fe29b4a2b412468c6d97b7a3bfd2f69c50691e181fde43710bc61ffff2c6e7cbab59de70b97d993707c16e4a909273cc873d9156dda0ad03214e29048ac39532b8ec11c071174219fefa85e0d489468036154d19d2b683b20b07589abb9f4d863fcd17598d43a8b82d37236ceee7588d08a22f4c9662bba7f4cf6595f28b0e7b7e62f9be2d42f1b11f5c06aca7ed7568d8922d9155c229a8d57b251695c2bd645cb44539e4278b4431ac60a318fbd22afe18b204f9730f86a07c43355ce89f9646be5810e0c6bd2043066d359efe73c8e0ac7f581e048ed1809ad2720ea96f528d0acc7fd622b86d3073e8b1ac0b5d70f4e92b045e8cdf1fb6c999332ba2c279ebab2262589082a8214187a8904671a2c4eec8828335dc7f49fe438fb4e34c762e9f7febe30672a9ced8b0a2b66373d3a3b9efbe46e63f4d8b2723ebe85736f5
感谢 Topaco 的帮助。由于我的疏忽,把CTR误认为CBC,造成混乱。
解决方案
您可以尝试以下方法:
openssl enc -aes-128-cbc -a -A -in Cipherbase64.txt -out PlainText.txt -K 31323334353637383930303030303030 -iv 31323334353637383930303030303030 -d
在-K
and-iv
选项之后,输入必须是十六进制字符串,即1234567890000000
您必须使用31323334353637383930303030303030
. 该-A
选项表示 Base64 编码的密文包含在一行中,此处为. 所以没有必要使用换行符。
更新:
事实证明,实际用于生成发布密文的 JavaScript代码使用 CTR模式进行加密(而不是CBC模式)。因此,可用于解密发布的密文的 OpenSSL 语句为:
openssl enc -aes-128-ctr -a -A -in Cipherbase64.txt -out PlainText.txt -K 31323334353637383930303030303030 -iv 31323334353637383930303030303030 -d
解密后的文字是:
{"sign":"13adab9285fe86206b73e029ff0d290fc0e31237","timestamp":1570608017,"logid":"MTU3MDYwODA2MjAzMjAuMTMzMjE0Nzc2OTIxNTgxNDY=","uk":3012946979,"shareid":547370362,"fid_list":"[\"482622974717034\"]","input":"aaxb","vcode":"33324238656332346361663334656637323237633636373637643239666664336662393132313032313738303030303030303030303030303031353730363038303530B0D6C0036A1909217D2CDCD5B76B46FB"}
可以在这里轻松验证。
推荐阅读
- hadoop - Hadoop 为什么选择 MapReduce 作为其计算引擎?
- r - 不同 R 包中的 S3 类名冲突
- node.js - Mongoose Populate Virtuals 不工作并返回 null
- spring - 没有发布/刷新的春季云配置
- ios - Cordova iOS:安装新的模拟器镜像
- angular - 显示由 ngFor* Angular 6 生成的行数
- c++ - 用户键入时更新 QTextDocument
- xsd - JSON Schema 验证器“id”字段
- c# - c#连接字符串和连接app.config
- sql - 我可以只从文件备份中恢复 SQL Server 实例吗?