gpt4 book ai didi

ruby - OpenSSL key 长度在 Ruby 中太短,在 Bash 中则不然

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:35 26 4
gpt4 key购买 nike

我最初在 Bash 中尝试了一个简单的加密脚本,它的效果与预期的差不多。但是,我现在正尝试在 Ruby 中做同样的事情,而 Ruby 版本的功能似乎有点不同。

bash

加密

echo 'hello' | openssl enc -aes-256-cbc -a

密码:mypass

结果:U2FsdGVkX19rERfOXiKs97FgwIkLy3+ttZzaHkEoQyE=

解密

echo 'U2FsdGVkX19rERfOXiKs97FgwIkLy3+ttZzaHkEoQyE=' | openssl aes-256-cbc -d -a

密码:mypass

结果:你好


ruby

require "openssl"
require 'base64'

cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt
cipher.key = 'mypass'

到目前为止,这是我在 Ruby 中尝试过的,但我收到了 OpenSSL::Cipher::CipherError: key length too short 错误。我想尽可能地模仿 Bash。

最佳答案

OpenSSL 使用(大部分未记录的)基于密码的 key 派生函数 (PBKDF),称为 EVP_BytesToKey,使用 8 字节的盐和 1 的迭代计数。魔术和 8 字节的盐分别作为前缀密文(检查结果的第一个字节以查看魔法)。

显然 "mypass" 不能是 AES 的正确 key 。 AES key 是 128、192 和 256 key 大小的 16、24 或 32 字节二进制值。但是,您可以在命令行上使用 -K 开关直接指定 key ,以使代码与 Ruby Cipher 对象兼容。在这种情况下,您需要使用二进制(文件)或十六进制为 openssl 命令行和 Ruby 指定 key 。您还需要指定一个 IV。

或者,您必须为 Ruby 找到一个 EVP_BytesToKey 实现,但请注意,这是一个旧的 OpenSSL 特定函数,具有完全不安全的迭代计数。

关于ruby - OpenSSL key 长度在 Ruby 中太短,在 Bash 中则不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com