5

这可能是一个愚蠢的问题,但我无法弄清楚。目前,我正在使用这个网站: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”,这是我不明白的。如果有人可以向我解释,我将不胜感激。

谢谢 !

4

2 回答 2

5

多亏了一位朋友,我们才知道出了什么问题。他让我打印钥匙

echo -ne "a" |  openssl  rc4 -pass pass:a -e  -nopad    -nosalt -p
key=0CC175B9C0F1B6A831C399E269772661

我们看到添加了一些填充,最后我们输入了 0x61。事实证明,openssl 从 pass 中生成了一个密钥。

相反,如果我们使用 -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

结果和网页上的一样:)

于 2011-12-02T12:34:08.840 回答
0

工作正在进行中

这是一个有趣的模式。使用“0”作为加密密钥,我们在明文和密文之间得到了一些强烈的趋势。见下文。

我对这两种实现之间的区别感兴趣的是 fyne 单调增加,而 OpenSSL 有点阶梯式。稍后我会再看一下 - 我将其标记为社区 wiki,因为我还不认为这是一个答案,但我认为分析可能会有所帮助。

范恩:

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
于 2011-12-02T04:38:11.363 回答