encryption - 使用 openssl 解密 json 文件 aes-128-ctr
问题描述
我在尝试使用 openssl 命令解密 json 文件时遇到问题。
我有所有这些信息:
- 密码:aes-128-ctr
- 密码参数:
- iv: 14ba8.......c2161
- 密文:cd1d9e5e1.....8941100
- kdf: pbkdf2, kdfparams: { c:10240, dklen:32, prf:hmac-sha256, salt: a9e493.......5d6fb8a76 }
- mac:2080abdb3c86.....c7b7b93
所以我正在尝试使用以下命令解密密文:
$ 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
这是解密这些数据的正确方法吗?
解决方案
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
,并且十六进制字符串周围不需要引号。
推荐阅读
- java - 无法使用 IntelliJ 上的空手道框架转义正则表达式
- webpack - Babel-loader 需要 babel-core 而不是 @babel/core
- python - matplotlib 雷达图基线
- c# - 如何在 Linq 中通过分区获取 Row_Number 到实体
- hyperledger-fabric - sudo ./byfn.sh generate 命令抛出一个错误,提示找不到加密生成工具
- windows - 在 PS 中将 if-else 转换为 try-catch
- neo4j - Neo4J Cypher 查询以将集合与其他集合进行匹配
- c# - 无法在 DataTable C# 中向 Data.DataRow 添加值
- sql - 选择 FROM 语法多表 Oracle 11G
- java - 在 J2EE 动态 Web 项目中找不到 CSS 文件