我使用Ruby自动执行OpenSSL文件加密过程。以这种方式加密的文件需要能够在Linux命令行上使用OpenSSL进行解密。使用Ruby OpenSSL加密文件并使用命令行解密
def encrypt_file
cipher = OpenSSL::Cipher.new('aes-256-cbc')
cipher.encrypt
cipher.key = "somelongkeystring"
buf = ""
File.open("file.enc", "wb") do |outf|
File.open("file.zip", "rb") do |inf|
while inf.read(4096, buf)
outf << cipher.update(buf)
end
outf << cipher.final
end
end
end
我需要能够解密使用以下命令中的文件(file.enc):
我可以使用以下方法的Ruby加密文件
$ openssl aes-256-cbc -d -in file.enc -out file.zip
然而,当我运行这个时,我从上面输入密钥后得到一个错误bad magic number
。
既然不能改变解密的方法(这意味着它仅使用一个密码,并输入在Linux命令行),我怎样才能改变我的Ruby方法对文件进行加密,因此它可以被解密这样?
可能的重复http://stackoverflow.com/questions/14602069/why-cant-i-make-openssl-with-ruby-and-command-line-openssl-interoperable –
@MarcoSandrini我的问题类似于题。然而,解决方案是改变openssl命令,我说我不能这样做。我只能修改Ruby方法。 – analyticsPierce
然后你应该改变你的代码,以便它使用与openssl的命令行版本使用相同的派生算法来衍生密码中的密钥和IV。但是引用问题的答案http://security.stackexchange.com/questions/29106/openssl-recover-key-and-iv-by-passphrase“使用一个自定义的密钥派生函数和一些重复的散列函数,标准和未经良好审查的构造(!)依赖于可疑声誉(!!)的MD5哈希函数;“ –