我有一个旧的 shell 脚本,由不再在公司工作的人创建,用于加密和解密我们的访问密码。旧的脚本基本上是这样的:
PFILE=/home/user/keys/pwfile
if [ ! -f $PFILE ] || [[ "$NEW_FILE" == "true" ]]; then
rm -rf $PFILE
echo "PASSWORD=notset" >> $PFILE
fi
if [ -n "$PASSWORD" ]; then
echo "changing PASSWORD"
P=`echo ${PASSWORD} | openssl enc -aes-128-cbc -a -salt -pass pass:${SECRET}`
sed -i "/PASSWORD=/ s|=.*|=${P}|" ${PFILE}
fi
解密脚本基本上是这样做的:
PASSWORD=$(sed -n 's|^PASSWORD=||p' $PFILE)
password=`echo $PASSWORD | openssl enc -aes-128-cbc -a -d -salt -pass pass:${SECRET}`
但现在当我运行这个时,我收到错误:
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
我创建了一个测试脚本来尝试这个新版本,它看起来像这样:
P=`echo 'rawpassword' | openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -salt -pass pass:'secret'`
echo "P = " $P
U= `echo P | openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -d -salt -pass pass:'secret'`
echo "U = " $U
似乎它正在加密,但我在解密过程中做错了一些事情,因为它打印了一个空字符串并给出了错误:
error reading input file
我在解密过程中做错了什么?