我最初尝试在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