gpt4 book ai didi

openssl - RC4 不能与 openssl 命令一起正常工作?

转载 作者:行者123 更新时间:2023-12-04 06:44:28 24 4
gpt4 key购买 nike

我需要使用 RC4 对执行结果进行编码。在执行 bash 脚本之前,我正在测试如何加密数据。

我正在使用下一个命令:

echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad | xxd

输出是:
0000000: bdb1 7f03                                ....

现在,如果我尝试对这个在线 RC4 编码器做同样的事情 http://www.fyneworks.com/encryption/rc4-encryption/index.asp输出为:DA EA 54 65

不同的输出,具有相同的数据和相同的 key ??数据:“测试”键:“测试”

我还检查了一个我用 C 编码的小程序,输出与在线编码器相同......所以,问题是,我在命令 openssl 上做错了什么?

谢谢!

最佳答案

RC4 具有可变长度的 key ,OpenSSL 的 enc 实用程序强制您选择 key 大小。您正在测试的这些其他实现没有这样的限制,因此您的 key 不匹配。

documentationenc实用程序描述了密码允许的 key 大小:

    rc4                128 bit RC4
rc4-64 64 bit RC4
rc4-40 40 bit RC4

因此 RC4 仅适用于 128 位(16 字节) key 。另外, -k option 意味着从给定的密码中派生出一个 key 。它使用 EVP_BytesToKey 在内部执行此操作函数,它实现了 key 派生函数 (KDF)。

无论如何,长话短说,您的 RC4 实现没有使用相同的 key 。使用 -p让 OpenSSL 打印它正在使用的实际 key 的选项:
$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p
key=098F6BCD4621D373CADE4E832627B4F6

此外,由于它需要 16 字节的 key ,因此即使您使用 -K 指定了一个短键,它也会对较短的键进行零填充。 (大写 K)选项。您可以使用 xxd找到“test”和 -p 的 ascii 十六进制值再次查看 OpenSSL 的 key :
$ echo -ne "test" | xxd
0000000: 7465 7374 test
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p
key=74657374000000000000000000000000

因此,您必须匹配 key 长度并使用 -K 指定十六进制值 key 。选项,您会看到 RC4 实现是等效的。例如,这里我使用 RC-40 将 key 长度限制为 5 个字节并使用 5 个字节的 key “测试”,或 74 65 73 74 73 .
$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd
0000000: dd9b 5cb9

您会发现在给定关键“测试”时,您的 Web 实现获得了相同的结果。

关于openssl - RC4 不能与 openssl 命令一起正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9329631/

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