使用 mac 命令行解密使用 ruby 加密的 zip

问题描述 投票:0回答:1

我遇到一个问题,无法解密 Mac 上用 Ruby 加密的文件。

使用以下 Ruby 代码,我使用 AES 加密对 zip 文件进行了加密:

require 'openssl'

key = OpenSSL::Cipher.new('AES-256-CBC').random_key
iv = OpenSSL::Cipher.new('AES-256-CBC').random_iv

key_hex = key.unpack('H*').first
iv_hex = iv.unpack('H*').first

puts OpenSSL::OPENSSL_LIBRARY_VERSION # OpenSSL 1.1.1t  7 Feb 2023
puts "Key: #{key_hex}"
puts "IV:  #{iv_hex}"

cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt
cipher.key = key
cipher.iv = iv
binary = cipher.update(data) + cipher.final
binary.unpack1('H*')

随后,我尝试使用 Mac OS 终端解密创建的二进制文件:

$ openssl version
OpenSSL 1.1.1s  1 Nov 2022
$ openssl enc -aes-256-cbc -d -K <key_hex> -iv <iv_hex> -in encrypted > decrypted.zip

但是,出现“解密错误”错误,我无法解密它:

bad decrypt
4705359360:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:612:

请告诉我解决方法!

ruby openssl
1个回答
0
投票

您需要确保使用

openssl
命令所需的正确数据表示形式。它期望原始形式的加密数据,而不是十六进制编码。

看来您已将加密数据的十六进制编码版本放入编码文件中(即最后一个 ruby 语句的结果)。相反,您可以将

binary
变量的内容放入
encrypted
文件中(即上一个 ruby 语句的结果)。

© www.soinside.com 2019 - 2024. All rights reserved.