Bash、openssl、退出状态的奇怪行为
Bash, openssl, strange behavior on exit status
我正在编写一个脚本,该脚本应该对作为使用 openssl 加密的参数传递的文本文件进行字典攻击。
这是我写的:
#!/bin/bash
# written by Cosimo Colaci
passwords=( $(cat italian.txt) ) # italian.txt is a list of words
for word in ${passwords[@]}
do
openssl enc -d -aes-128-cfb1 -in "" -k $word 2>/tmp/err
pid=$$
wait $pid
if [ -s /tmp/err ]
then
continue
else
openssl enc -d -aes-128-cfb1 -in "" -k $word;
break;
fi
done
我也试过了
for word in ${passwords[@]}
do
openssl enc -d -aes-128-cfb1 -in "" -k $word &>/dev/null
exitstatus=$?
if [ $exitstatus -ne 0 ]
then
continue
else
openssl enc -d -aes-128-cfb1 -in "" -k $word;
break;
fi
done
问题是在某些 cicles 上,即使解密失败,退出状态也是 0,正如我通过启动看到的那样:
bash -x ./crack_italian.sh filetodecript.txt
但是相同的命令在终端中按预期运行并失败。
while read -r word; do
if openssl enc -d -aes-128-cfb1 -in "" -k "$word" >openssl.out 2>&1
then
cat openssl.out
break
fi
done <italian.txt
rm -f openssl.out
- 您不需要将文件读入数组。
- 您可以在
if
语句中 直接 使用退出状态。请注意,在您的第二个示例中,$?
到 exitstatus
的分配更改 $?
.
- 变量扩展应该用双引号引起来。
略短:
while read -r word; do
openssl enc -d -aes-128-cfb1 -in "" -k "$word" >openssl.out 2>&1 &&
{ cat openssl.out; break; }
done <italian.txt
rm -f openssl.out
我正在编写一个脚本,该脚本应该对作为使用 openssl 加密的参数传递的文本文件进行字典攻击。 这是我写的:
#!/bin/bash
# written by Cosimo Colaci
passwords=( $(cat italian.txt) ) # italian.txt is a list of words
for word in ${passwords[@]}
do
openssl enc -d -aes-128-cfb1 -in "" -k $word 2>/tmp/err
pid=$$
wait $pid
if [ -s /tmp/err ]
then
continue
else
openssl enc -d -aes-128-cfb1 -in "" -k $word;
break;
fi
done
我也试过了
for word in ${passwords[@]}
do
openssl enc -d -aes-128-cfb1 -in "" -k $word &>/dev/null
exitstatus=$?
if [ $exitstatus -ne 0 ]
then
continue
else
openssl enc -d -aes-128-cfb1 -in "" -k $word;
break;
fi
done
问题是在某些 cicles 上,即使解密失败,退出状态也是 0,正如我通过启动看到的那样:
bash -x ./crack_italian.sh filetodecript.txt
但是相同的命令在终端中按预期运行并失败。
while read -r word; do
if openssl enc -d -aes-128-cfb1 -in "" -k "$word" >openssl.out 2>&1
then
cat openssl.out
break
fi
done <italian.txt
rm -f openssl.out
- 您不需要将文件读入数组。
- 您可以在
if
语句中 直接 使用退出状态。请注意,在您的第二个示例中,$?
到exitstatus
的分配更改$?
. - 变量扩展应该用双引号引起来。
略短:
while read -r word; do
openssl enc -d -aes-128-cfb1 -in "" -k "$word" >openssl.out 2>&1 &&
{ cat openssl.out; break; }
done <italian.txt
rm -f openssl.out