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