【问题标题】:Openssl RC4 - password as plain textOpenssl RC4 - 纯文本密码
【发布时间】:2018-01-04 09:42:26
【问题描述】:

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

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

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

结果:8189898ec30bd96a81bca0e293

获取密码的对称密钥

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

key=1E8B649064CC6657312EE7346ED410A4

上面的密码使用 hexa 键(-k 选项)- MATCHES。

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

结果:8189898ec30bd96a81bca0e293

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

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

谢谢,

阿克

【问题讨论】:

  • 如何将密钥作为纯文本而不是十六进制传递。

标签: unix encryption openssl passwords rc4-cipher


【解决方案1】:

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

这就是 OpenSSL(命令行)在底层所做的事情:它使用了一种名为 EVP_BytesToKey 的弱 OpenSSL 专有算法。这基本上只与 OpenSSL 实现或兼容性库兼容。

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

【讨论】:

  • 感谢 Maarteen,要求是将我的结果与在线工具相匹配。正如您正确提到的,当我使用十六进制代码作为键时,我可以完美匹配,但我想要一个使用纯文本作为键的选项。
  • 在表单提交中我看到 key_type=plain,我想要 openssl 中的等效选项。 function=arcfour&mode=stream&key=rc4cipher&key_type=plain&iv=&phone=b91fa0ab46abb20751c8c9b1d828e8fb8356adcb&do=form-submit
  • 这是一个愚蠢的要求。但是,您可以将文本编码为字节,然后再编码为十六进制,然后重试。这些在线工具经常会出现编码错误,因此很难完全匹配所有可能的输入。
  • 有人知道 openssl 选项将密钥保留为纯文本吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2013-06-21
  • 2015-06-29
  • 2012-05-07
  • 1970-01-01
相关资源
最近更新 更多