我遇到了一个问题,我无法在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:
型
请告诉我解决办法!
1条答案
按热度按时间ozxc1zmp1#
您需要确保使用
openssl
命令所期望的正确数据表示。它期望加密数据以原始形式出现,而不是十六进制编码。看起来你已经把加密数据的十六进制编码版本放到了你的编码文件中(即你最后一条ruby语句的结果)。相反,你需要把
binary
变量的内容放到encrypted
文件中(即前一条ruby语句的结果)。