Rya*_*ush 3 ruby encryption bash
我最初在Bash中尝试了一个简单的加密脚本,它的工作原理与预期的差不多。但是,我现在正在尝试在Ruby中执行相同的操作,而Ruby版本的功能似乎有所不同。
加密
echo 'hello' | openssl enc -aes-256-cbc -a
Run Code Online (Sandbox Code Playgroud)
密码: mypass
结果: U2FsdGVkX19rERfOXiKs97FgwIkLy3+ttZzaHkEoQyE=
解密
echo 'U2FsdGVkX19rERfOXiKs97FgwIkLy3+ttZzaHkEoQyE=' | openssl aes-256-cbc -d -a
Run Code Online (Sandbox Code Playgroud)
密码: mypass
结果: hello
require "openssl"
require 'base64'
cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt
cipher.key = 'mypass'
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我在Ruby中尝试过的操作,但收到OpenSSL::Cipher::CipherError: key length too short错误消息。我想尽可能地模仿Bash。
OpenSSL使用一个(主要是未公开的)基于密码的密钥派生函数(PBKDF),EVP_BytesToKey该函数使用8字节盐和1的迭代计数进行调用。密文分别以8字节的魔术和盐作为前缀(将结果的第一个字节检查为见魔术)。
明显 "mypass"它不是AES的正确密钥。AES密钥是128、192和256密钥大小的16、24或32字节二进制值。但是,您可以直接使用-K命令行上的开关指定键,以使代码与Ruby Cipher对象兼容。在这种情况下,您需要在openssl命令行和Ruby中使用二进制(文件)或十六进制指定密钥。您还需要指定一个IV。
或者,您必须找到EVP_BytesToKeyRuby 的实现,但是请注意,这是一个旧的OpenSSL特定功能,具有完全不安全的迭代计数。
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |