Bash Word生成循环

时间:2016-08-30 13:13:12

标签: bash

我正在尝试创建一个生成5个字母单词的单词循环,并且测试是针对测试然后如果不正确则生成下一个单词。然而,目前它一次产生所有53,200个单词,我只希望“myword”在时间上是1个单词

#!/bin/bash
i=1
for n in $(seq 0 54000)
do
    IFS=$''
    hash="hash"
    myword=$(echo {a..z}{a..z}{a..z}{a..z}{a..z} |  awk '{print $1}')
    test=$(echo -n "$myword" | awk '{print $1}')
    if [ "$test" == "$hash" ]
    then
        echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! The password is     $test1   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        break
    else
        echo "Password   $myword  is incorrect"
        echo "$test"
    fi
done

这是一个循环。

1 个答案:

答案 0 :(得分:0)

您实际上并未在此使用in;你真正想要迭代的是可能的5个字母组合。这不是真正推荐的,因为在开始迭代之前生成完整列表需要很长时间才能生成:

hash="hash"
for myword in {a..z}{a..z}{a..z}{a..z}{a..z}; do
    test=$(echo -n "$myword" |  awk '{print $1}')
    if [[ $test = $hash ]]; then
        break
    else
        ...
    fi
done

最好将迭代分解为更多离散的块;它总体上不会更快,但你至少可以在没有先在内存中生成所有11,881,376种可能性的情况下开始实际计算。

for a in {a..z}; do
  for b in {a..z}; do
    for c in {a..z}; do
      for d in {a..z}; do
        for e in {a..z}; do
            myword="$a$b$c$d$e"
            test1=...
            if [[ ... ]]; then
              break 5
            fi
        done
      done
    done
  done
done

但最好的想法是使用专为通用数据处理而设计的语言,而不是bash。特别是,一种带有用于计算SHA-256校验和的库的语言,而不是为每个密码分配一个新程序。