max*_*dap 17 encryption openssl cryptography
我会尝试尽可能简洁.
我希望能够使用OpenSSL加密和解密简单的字符串,这是我之前所做的.
但是,必须满足以下条件:
我在那里50%.我可以通过以下方式成功执行ENCRYPTION:
echo 'someTextIWantToEncrypt' | openssl enc -e -aes-256-cbc -nosalt -pass pass:mySecretPass
Run Code Online (Sandbox Code Playgroud)
输出结果是:
(??b}n??v???>??G??.?B??~?
Run Code Online (Sandbox Code Playgroud)
太好了.现在我想解开那个字符串.所以我这样做:
echo -n '(??b}n??v???>??G??.?B??~?' | openssl enc -d -aes-256-cbc -pass pass:mySecretPass
Run Code Online (Sandbox Code Playgroud)
甚至作为替代方案:
openssl enc -d -aes-256-cbc -pass pass:mySecretPass <<< '(??b}n??v???>??G??.?B??~?'
Run Code Online (Sandbox Code Playgroud)
但我得到了这样的答复:
bad magic number
Run Code Online (Sandbox Code Playgroud)
虽然我不想使用输入/输出文件,但该方法100%工作:
# encrypt to file
echo -n 'someTextIWantToEncrypt' | openssl enc -e -nosalt -out test.txt -aes-256-cbc -pass pass:mySecretPass
# decrypt from file
openssl enc -d -nosalt -in test.txt -aes-256-cbc -pass pass:mySecretPass
# result of decryption (is successful):
someTextIWantToEncrypt
Run Code Online (Sandbox Code Playgroud)
那么......如何在不使用输入/输出文件的情况下实现上述解密过程?我觉得我很亲密,但遗漏了一些小细节.
提前致谢.
Ada*_*iss 31
问题是加密使用整个ASCII字符集,包括不可打印的字符.如果您希望能够剪切和粘贴加密数据,则需要将其转换为仅可打印字符.您可以使用-base64(或-a)选项执行此操作:
echo 'someTextIWantToEncrypt' | \
openssl enc -base64 -e -aes-256-cbc -nosalt -pass pass:mySecretPass
KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=
Run Code Online (Sandbox Code Playgroud)
然后以同样的方式解密它:
echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \
openssl enc -base64 -d -aes-256-cbc -nosalt -pass pass:mySecretPass
Run Code Online (Sandbox Code Playgroud)
警告: 如果您使用的是openssl,我只能假设数据的机密性,因此密码对您很重要.如果是这种情况,则不应在命令行上提供密码,因为它可以向具有运行权限的任何人公开ps.
更好的解决方案是将密码存储在环境变量中,并从那里读取openssl:
export passwd="mySecretPass"
echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \
openssl enc -base64 -d -aes-256-cbc -nosalt -pass env:passwd
Run Code Online (Sandbox Code Playgroud)