RC4无法正确使用openssl命令?

RC4无法正确使用openssl命令?

问题描述:

我需要用RC4编码执行结果。在做bash脚本之前,我正在测试如何隐藏数据。RC4无法正确使用openssl命令?

我使用的下一个命令:

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

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

另外我检查了一个小程序,我用C编码,输出和在线编码器一样...所以,问题是, m做错了命令openssl?

谢谢!

RC4具有可变长度的键,OpenSSL的enc工具强制您选择一个键的大小。这些您正在测试的其他实现不会造成这种限制,因此您的密钥不匹配。

documentationenc实用描述了被允许的密钥长度的密码:

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

所以RC4只适用于128位(16字节)的密钥。此外,-k选项意味着从给定密码中派生密钥。它在内部使用EVP_BytesToKey函数执行此操作,该函数实现了密钥导出函数(KDF)。

无论如何,长话短说,您的RC4实现不使用相同的密钥。使用-p选项,OpenSSL的打印用实际的关键:

$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p 
key=098F6BCD4621D373CADE4E832627B4F6 

此外,由于该公司预计,16字节的键,它会零垫较短的键即使您指定与-K一个快捷键(大写K)选项。您可以使用xxd找到“测试”和-p的ASCII十六进制值再次看到OpenSSL的关键:

$ echo -ne "test" | xxd 
0000000: 7465 7374        test 
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p 
key=74657374000000000000000000000000 

所以,你必须匹配的密钥长度,并指定与-K选项十六进制值键,你会看到RC4的实现是等价的。例如,在这里,我使用RC-40将密钥长度限制为5个字节,并使用5个字节的密钥“测试”或74 65 73 74 73

$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd 
0000000: dd9b 5cb9 

你会发现当你给出关键“测试”时,你的web实现会得到相同的结果。