0

我正在尝试使用 openssl 使用 RC4 进行加密。我只能将密钥作为十六进制而不是明文来匹配在线密码工具的结果。

使用明文密码选项 - 不匹配。

# echo -ne "stackoverflow" | openssl rc4 -pass pass:"rc4cipher" -nopad -nosalt | xxd -p

结果:8189898ec30bd96a81bca0e293

获取密码的对称密钥

#echo -ne "stackoverflow" | openssl rc4 -pass pass:"rc4cipher" -nopad -nosalt -p

键=1E8B649064CC6657312EE7346ED410A4

使用 hexa 键作为上述密码(-k 选项)- MATCHES。

echo -ne "stackoverflow" | openssl rc4 -K "1E8B649064CC6657312EE7346ED410A4" -nopad -nosalt | xxd -p

结果:8189898ec30bd96a81bca0e293

我可以通过将密钥用作十六进制而不是纯文本来将我的结果与在线工具匹配。

纯文本 六边形

有人可以帮我选择与 openssl 一起使用的选项吗?

谢谢,

阿克

4

1 回答 1

1

密钥应由随机二进制数据组成。它们不应文本组成。如果您需要执行基于密码的加密,您需要使用密码哈希,或者更准确地说,使用基于密码的密钥派生函数将密码转换为密钥。常见的 PBKDF 是 bcrypt、scrypt、PBKDF2 和 Argon2。

这就是 OpenSSL(命令行)在下面所做的:它使用了一个弱的 OpenSSL 专有算法,称为EVP_BytesToKey. 这基本上只与 OpenSSL 实现或兼容性库兼容。

大多数在线工具(您最终不应该使用它们来验证任何实现)只是使用字符编码(例如 UTF-8、Windows-1252 或任何其他(通常未指定)编码)将文本转换为二进制。这不安全;它和网上发现的大多数点击诱饵加密工具一样死脑筋。

于 2018-01-04T10:45:25.267 回答