我正在尝试使用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
使用上述密码的六进制密钥(-k选项) - MATCHES。
echo -ne" stackoverflow" | openssl rc4 -K" 1E8B649064CC6657312EE7346ED410A4" -nopad -nosalt | xxd -p
结果:8189898ec30bd96a81bca0e293
我可以使用密钥作为十六进制而不是纯文本将我的结果与在线工具相匹配。
有人可以选择使用openssl吗?
谢谢,
阿克
答案 0 :(得分:1)
密钥应包含随机二进制数据。他们应不包含文字。如果您需要执行基于密码的加密,则需要使用密码哈希,或者更确切地说,使用基于密码的密钥派生函数将密码转换为密钥。常见的PBKDF是bcrypt,scrypt,PBKDF2和Argon2。
这就是OpenSSL(命令行)所做的事情:它使用一种名为EVP_BytesToKey
的弱OpenSSL专有算法。这基本上只与OpenSSL实现或兼容性库兼容。
大多数在线工具(您应该从不用于验证最终的任何实现)只需使用字符编码(如UTF-8)将文本转换为二进制文件, Windows-1252或任何其他 - 通常未指定 - 编码。这不安全;它与大多数在线发现的点击诱饵加密工具一样具有脑力。