You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac终端解密Ruby AES-256-CBC加密文件遇bad decrypt错误求解

解决Ruby AES-256-CBC加密文件无法用OpenSSL终端解密的问题

问题根源

你的Ruby代码最后将加密后的二进制数据通过binary.unpack1('H*')转换为十六进制字符串,但你直接将该字符串保存为文件后使用OpenSSL命令解密。而OpenSSL的enc命令默认处理的是原始二进制加密数据,并非十六进制格式,这直接导致了"bad decrypt"错误。

解决方法

方法1:修改Ruby代码,直接保存二进制加密数据

修改代码最后一行,跳过十六进制转换步骤,直接将加密后的二进制数据写入文件:

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}"

# 确保data是二进制读取的zip文件内容
data = File.binread('your_source.zip')

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

# 直接保存二进制加密数据,替换原来的unpack操作
File.write('encrypted', binary)

生成的encrypted文件可直接用你原有的OpenSSL命令解密:

openssl enc -aes-256-cbc -d -K <key_hex> -iv <iv_hex> -in encrypted > decrypted.zip

方法2:针对已生成的十六进制加密文件,先转二进制再解密

如果已经保存了十六进制格式的加密文件,先用xxd工具将其还原为二进制数据,再执行解密:

# 将十六进制文件转成二进制
xxd -r -p your_hex_encrypted_file > encrypted_binary
# 解密二进制文件
openssl enc -aes-256-cbc -d -K <key_hex> -iv <iv_hex> -in encrypted_binary > decrypted.zip

额外验证点

确保Ruby代码中读取原始zip文件时使用File.binread()而非File.read(),避免文本模式读取导致的二进制数据损坏。

内容的提问来源于stack exchange,提问作者bluecat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:12:23