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

bksxznpy  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(138)

我遇到了一个问题,我无法在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”错误,我无法解密它:

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


请告诉我解决办法!

ozxc1zmp

ozxc1zmp1#

您需要确保使用openssl命令所期望的正确数据表示。它期望加密数据以原始形式出现,而不是十六进制编码。
看起来你已经把加密数据的十六进制编码版本放到了你的编码文件中(即你最后一条ruby语句的结果)。相反,你需要把binary变量的内容放到encrypted文件中(即前一条ruby语句的结果)。

相关问题