我使用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哈希函數;「 –