首页 > 解决方案 > 使用 openssl 解密 json 文件 aes-128-ctr

问题描述

我在尝试使用 openssl 命令解密 json 文件时遇到问题。

我有所有这些信息:

所以我正在尝试使用以下命令解密密文:

$ openssl enc -aes-128-ctr -d -in text_in.enc -pbkdf2 -salt -iter 10240  -iv "14ba8......c2161" -S "a9e493.......5d6fb8a76" -pass pass:<mypin> 

在 text_in.enc 文件中有密文:

$ cat text_in.enc
cd1d9e5e1.....8941100

但是当我使用 openssl 命令时,我得到“坏幻数”错误。

$ openssl enc -aes-128-ctr -d -in text_in.enc -pbkdf2 -salt -iter 10240  -iv "14ba8......c2161" -S "a9e493.......075d6fb8a76" -pass pass:<mypin>
bad magic number

这是解密这些数据的正确方法吗?

标签: encryptionopenssl

解决方案


openssl enc解密模式下的工具-d不支持在命令行提供盐。除非您指明-nosalt,否则它希望文件以Salted__ASCII 中的幻数开头,然后是盐字节。您的密文文件在开始时不包含该信息,因此出现错误。

您可以通过执行以下操作“手动”在前面添加缺少的幻数和盐字节:

$ cat <(printf Salted__) <(printf a9e493...075d6fb8a76 | xxd -r -p) text_in.enc | openssl enc -aes-128-ctr -d -iter 10240 -iv 14ba8...c2161 -pass pass:<mypin>

xxd -r用于将您的十六进制字符串盐转换为字节。

请注意,-pbkdf2使用该选项时会隐含该选项-iter,并且十六进制字符串周围不需要引号。


推荐阅读