这可能是一个愚蠢的问题,但我无法弄明白。 目前,我正在使用此网站:http://www.fyneworks.com/encryption/rc4-encryption/来加密rc4以获取概念证明。例如,我输入'a'作为明文,'a'作为密码,我得到'71'作为密文(这是'q'的ascii表示)。 我想使用openssl:
从命令行执行相同的操作> echo a | openssl rc4 -nosalt -out /tmp/uuu
enter rc4 encryption password:
Verifying - enter rc4 encryption password:
> cat /tmp/uuu | xxd
0000000: 5896 X.
所以我们得到'5896'而不是'71',这是我不明白的。如果有人能向我解释,我将不胜感激。
谢谢!
答案 0 :(得分:4)
感谢朋友,我们弄清楚出了什么问题。他告诉我打印钥匙
echo -ne "a" | openssl rc4 -pass pass:a -e -nopad -nosalt -p
key=0CC175B9C0F1B6A831C399E269772661
我们看到添加了一些填充,最后输入了0x61。事实证明,openssl会从传递中生成一个密钥。
相反,如果我们使用-K选项直接输入密钥:
echo -ne "a" | openssl rc4 -K 61 -e -nopad -nosalt -p
key=61000000000000000000000000000000
我们看到有一个填充'0'。实际上,它不希望我们使用太小的密钥(因为对于rc4,密钥必须至少40位长)。现在,让我们尝试使用128b密钥:
echo -ne "foobar" | openssl rc4 -K "6162636465666768696A6B6C6D6E6F70" -e -nopad -nosalt | xxd
0000000: caaf 2cbf d334 ..,..4
结果与网页上的结果相同:)
答案 1 :(得分:0)
这是一个有趣的模式。使用'0'作为加密密钥,我们在明文和密文之间得到了一些强烈的趋势。见下文。
我对这两个实现之间的区别感兴趣的是fyne单调增加而OpenSSL有点阶梯式。我稍后再看看它 - 我将此标记为社区维基,因为我不认为这是一个答案,但我认为分析可能有所帮助。
法恩:
0(0) = B8
0(1) = B9
0(2) = BA
0(3) = BB
0(4) = BC
0(5) = BD
0(6) = BE
0(7) = BF
0(8) = B0
0(9) = B1
OpenSSL的:
0(0) = 72
0(1) = 73
0(2) = 70
0(3) = 71
0(4) = 76
0(5) = 77
0(6) = 74
0(7) = 75
0(8) = 7A
0(9) = 7B
cat -n N > /tmp/test #Where n is a number
openssl rc4 -e -nosalt -in /tmp/test -out /tmp/uuu
cat /tmp/uuu |xxd