如何在 bash 脚本中逐行获取 Crunch 输出?

How to get Crunch output line by line in bash script?

我找到了一个旧的 multibit.key 钱包,但它是加密的,我想尝试暴力破解它,因为我知道密码的前 6 或 7 个字符。我正在生成具有固定开头的单词,最后才有所不同以尝试找到该钱包的密码。但是,当我 运行 c运行ch 程序时,bash 脚本正在等待它结束,然后开始读取输出的每一行,并且由于它生成了千兆字节的数据,程序结束被杀了。我想以这种方式在 crunch wordlist 生成器生成的每个单词处迭代循环,到目前为止我的代码如下。为此,我必须更改什么?

#!/bin/bash
echo Usage: apply-guesses.sh [key file]
echo Key file: 
for password in $(crunch 12 12 abcdefghjiklmnopqrstuvwxyz -t PASSWORD_BEGIN@@@@@); do
   echo ------
   echo Attempting: $password...
   openssl enc -d -p -aes-256-cbc -md md5 -a -in  -out recovered.key -pass pass:$password
   if [ $? -eq 0 ];
     then
       echo "Success!";
       break;
     else
       echo "Failed";
   fi
   echo ------
done

我对 crunch 没有任何经验,但我假设它会立即开始生成输出。为了本练习,我将使用以下函数模拟一些输出:

$ generate() { printf "1\n2\n3\n"; sleep 3; }

看起来像是使用 for 构造的某种缓冲,直到结束,例如:

for s in $(generate)
do
    echo $s
done
   # 3 second pause ...
1
2
3

但是如果我们切换到可比较的 while 构造,我们将看不到 buffering/delays:

while read -r s
do
    echo $s
done < <(generate)              # output lines are generated right away ...
1
2
3
   # 3 second pause ...