gpt4 book ai didi

Ruby OpenSSL 与 Linux openssl

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

我很难将 Ruby 的 OpenSSL 库与标准 Linux 命令行 openssl 协调起来。

我在这里尝试做的是用密码 foobar 加密字符串 mysecretstring 但首先使用 sha256 散列密码(模仿 aescrypt gem 中的代码) ).

这是我在 IRB 中所做的:

2.0.0-p353 :041 > aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
=> #<OpenSSL::Cipher::Cipher:0x000000026b8d50>
2.0.0-p353 :042 > aes.encrypt
=> #<OpenSSL::Cipher::Cipher:0x000000026b8d50>
2.0.0-p353 :043 > aes.key=OpenSSL::Digest::SHA256.new('foobar').digest
=> "\xC3\xAB\x8F\xF17 \xE8\xAD\x90G\xDD9Fk<\x89t\xE5\x92\xC2\xFA8=J9`qL\xAE\xF0\xC4\xF2"
2.0.0-p353 :044 > Base64.encode64(aes.update('mysecretstring')+aes.final)
=> "305V0Kbklj/HoBSK4ferhA==\n"
2.0.0-p353 :045 >

到目前为止一切顺利。现在我想看看这与我直接在 linux 命令行中使用 openssl 可以做什么相匹配。

[(master)]$ echo -n "foobar" | openssl dgst -sha256 -c
(stdin)= c3:ab:8f:f1:37:20:e8:ad:90:47:dd:39:46:6b:3c:89:74:e5:92:c2:fa:38:3d:4a:39:60:71:4c:ae:f0:c4:f2
[(master)]$ echo -n "mysecretstring" | openssl enc -e -aes-256-cbc -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX18EOcTrTMNQuCRnstUe6oY9b5RLuTOFcNo=
[(master)]$

在最后两个步骤中,我粘贴了字符串 c3:ab:8f:f1:37:20:e8:ad:90:47:dd:39:46:6b:3c:89:74: e5:92:c2:fa:38:3d:4a:39:60:71:4c:ae:f0:c4:f2这是我在第一步中通过散列密码“foobar”得到的。

为什么我没有得到相同的答案,更重要的是,我需要在 linux cmd 中做什么来模仿我从 Ruby 得到的结果?

最佳答案

您需要在 openssl 行中使用 -K 选项。然后您可以提供十六进制 key 。否则 OpenSSL 使用它自己的 key 派生机制从密码派生 key 。当提供 -K 时,您还应该提供 -iv。在这种情况下,为了兼容,IV 应由设置为零的 16 个字节组成。

所以试试下面这行:

echo -n "mysecretstring" | openssl enc -e -aes-256-cbc -a -K c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2 -iv 00000000000000000000000000000000

关于Ruby OpenSSL 与 Linux openssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23245672/

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