解密 PSKC 文件中的 CipherValue

解密 PSKC 文件中的 CipherValue

这与我在这个问题中所做的相反 -https://crypto.stackexchange.com/questions/21021/encryption-and-hmac-in-a-pskc-file

规格如下:https://tools.ietf.org/rfc/rfc6030.txt

数据/种子使用 AES-128-CBC 和密钥及 IV 进行加密。IV 附加在加密数据前面,整个数据采用 base-64 编码并存储在 CipherValue 字段中。

我有(这是来自我拥有的示例 pskc 文件,而不是来自 RFC)。

CipherValue/EncryptedText = v5dgOiUq1Hgja0g1SI9VpcHu81DLdcDqT8C3+k8wlQtk5KL1KErwojxLPSNO8lZt
Encryption Key = E9C1E401122EE194D620465A775D9C97
Algo = AES-128-CBC

我需要从中获取解密数据

这就是我正在做的事情

我将 CipherValue 存储在名为 cv 的文件中。

openssl base64 -d -A < cv > cv.bin

我得到一个 48 字节的 cv.bin

我分成了两部分

iv.bin = 16 bytes
data.bin = 32 bytes

我将 iv.bin 转换为十六进制

xxd -p < iv.bin
bf97603a252ad478236b4835488f55a5

所以我的

iv = bf97603a252ad478236b4835488f55a5

我将密钥转换为十六进制

我有一个名为 k.b64 的文件,其中包含E9C1E401122EE194D620465A775D9C97

openssl base64 -d -A < k.b64 > k.bin
xxd -p < k.bin
13d0b5138d35d76d84135f780fadb4e3ae40efbe43f42f7b

key = 13d0b5138d35d76d84135f780fadb4e3ae40efbe43f42f7b

现在我解密

openssl enc -aes-128-cbc -d  -K 13d0b5138d35d76d84135f780fadb4e3ae40efbe43f42f7b -iv bf97603a252ad478236b4835488f55a5  < data.bin

我收到以下错误

▓\=Bt═┐|)éïh│■ìcbad decrypt
62008:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:.
\crypto\evp\evp_enc.c:539:

我在这里做错了什么?

答案1

(根据评论回答,重新组织成符合逻辑的顺序。)

本例中的加密密钥值为E9C1E401122EE194D620465A775D9C9732 个字符,这些字符是有效的十六进制数字,本质上也是有效的 base64 字符。通常,应该从创建(或发送)数据的进程中了解数据的编码。

此值为不太可能之所以使用 base64,是因为除非刻意设计,否则超过几个字节的 base64 编码几乎总是会包含一些非十六进制数字的字符。不可能的为 base64,因为 32 个 base64 字符不使用 base64 填充(=)编码一个 24 字节的值,但我们知道该值是一个 16 字节的 AES-128 密钥。

因此,该密钥是十六进制编码的,将其提供给openssl enc -K需要十六进制解密的人即可正确解密。

相关内容