我最初嘗試在Bash中一個簡單的加密腳本和它的工作如預期差不多。然而,我現在試圖在Ruby中做同樣的事情,Ruby版本的功能有點不同。OpenSSL的密鑰長度在Ruby中太短,不擊
猛砸
加密
echo 'hello' | openssl enc -aes-256-cbc -a
密碼:mypass
結果:U2FsdGVkX19rERfOXiKs97FgwIkLy3+ttZzaHkEoQyE=
解密
echo 'U2FsdGVkX19rERfOXiKs97FgwIkLy3+ttZzaHkEoQyE=' | openssl aes-256-cbc -d -a
密碼:mypass
結果:hello
紅寶石
require "openssl"
require 'base64'
cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt
cipher.key = 'mypass'
這是我嘗試在Ruby中是什麼,到目前爲止,但我收到OpenSSL::Cipher::CipherError: key length too short
錯誤。我想盡可能地模仿Bash。
關鍵是縮短,你選擇使用一個256位(32字節)的密鑰'-aes-256-cb',但只提供一個6字節的密鑰'hello'。 Bash開發者只是懶於標記錯誤,但錯誤確實存在。 Ruby開發者更好,並標記錯誤。提供正確的長度密鑰。 CBC還要求但不提供IV的問題,請查看文件以瞭解在每種情況下如何處理這些問題。此外,Bash和/或Rouy可能會將密碼擴展爲kay,並可能會創建一個隨機IV並將其添加到加密數據中。 – zaph
謝謝,這清除了很多東西。我對加密仍然很陌生,但對於這種特殊用例,我只想讓一個難忘的密碼成爲關鍵。它是不是通過Bash版本將加密/解密加密到Ruby中? –
一般的解決方案是使用密碼派生函數(例如PBKDF2(Rfc2898))從密碼創建密鑰。正如Maarten指出OpenSSL默認使用PBKDF2,Ruby不會。但在任何情況下,安全性都是基於密碼的「質量」,因此諸如PBKDF2之類的功能會減慢暴力攻擊的速度。 – zaph