带Bash的彩虹桌

带Bash的彩虹桌,bash,openssl,Bash,Openssl,我正在考虑在bash中通过循环2个文件来创建彩虹表,但我在语法方面遇到了问题。我有两个文本文件,一个是filename,它有一个常用密码列表,另一个是saltList,它有一个小密码列表的salt。目前,脚本将执行,但不会停止(我昨天运行了大约3-4个小时)。我这样做对吗?我检查了rainbowCracker.txt文件,其中有值$1$fa7eb627$NRWF9wGqdr4rjHmrxmxI80,但它似乎从未停止过 saltList=$(tr ' ' '\n' < ${s

我正在考虑在bash中通过循环2个文件来创建彩虹表,但我在语法方面遇到了问题。我有两个文本文件,一个是
filename
,它有一个常用密码列表,另一个是
saltList
,它有一个小密码列表的salt。目前,脚本将执行,但不会停止(我昨天运行了大约3-4个小时)。我这样做对吗?我检查了rainbowCracker.txt文件,其中有值
$1$fa7eb627$NRWF9wGqdr4rjHmrxmxI80
,但它似乎从未停止过

        saltList=$(tr ' ' '\n' < ${saltFile})

        for line in $filename; do
                for salt in $saltList; do
                        openssl passwd -1 -salt $salt $line >> rainowbowCracker.txt
                done
        done
saltList=$(tr''\n'<${saltFile})
对于$filename中的行;做
对于$saltList中的盐;做
openssl密码-1-salt$salt$line>>rainowbowCracker.txt
完成
完成

bash中循环行的惯用方法是使用while构造:

试试这个:

while read a; do
  while read b; do 
     echo $a $b
  done < saltlist.txt
done < passwords.txt

在读取一个文件时;做
读b的时候;做
回声a$b
完成
另一种方法是先将所有内容读入内存。如果文件足够小,则此操作有效:

salts=($(< salts.txt))

for s in ${salts[@]}; do
  echo $s
done

salts=($(
我会用
openssl passwd-1-salt$salt$line>>rainowbowCracker.txt
替换
echo$a$b
吗?是的。试试看;-)成功了!
for
循环在bash中不常用吗?它们被使用。但是while循环构造的要点是,它通过文件的行“流式传输”,并通过读取内置代码优雅地处理换行。更现代的语言支持迭代器,使您能够以内存有效的方式在行上进行循环。Bash是一种非常原始的语言。它通常没有什么优雅之处:-D