Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Bash中迭代单词列表? #/bin/bash input=“usr/share/dict/words” 而IFS=读取-r行 做 如果[${line:0:1}==“a”]] 然后 key=“$(openssl dgst-sha1-hmac'$line'whisky.jpg)” 如果[$key==“G11a600a8dad2Gb98f18cefec4315a6c92777292”] 然后 回音“$line” fi fi 完成[$line==a*]_Bash - Fatal编程技术网

如何在Bash中迭代单词列表? #/bin/bash input=“usr/share/dict/words” 而IFS=读取-r行 做 如果[${line:0:1}==“a”]] 然后 key=“$(openssl dgst-sha1-hmac'$line'whisky.jpg)” 如果[$key==“G11a600a8dad2Gb98f18cefec4315a6c92777292”] 然后 回音“$line” fi fi 完成[$line==a*]

如何在Bash中迭代单词列表? #/bin/bash input=“usr/share/dict/words” 而IFS=读取-r行 做 如果[${line:0:1}==“a”]] 然后 key=“$(openssl dgst-sha1-hmac'$line'whisky.jpg)” 如果[$key==“G11a600a8dad2Gb98f18cefec4315a6c92777292”] 然后 回音“$line” fi fi 完成[$line==a*],bash,Bash,这就是我目前所学的课程。说明是编写一个简短的Bash脚本,逐行阅读单词列表,过滤掉任何不以字母“a”开头的单词,然后运行以查看任何给定单词的out是否与为图像whisky.jpg提供的所需摘要匹配,因为其中一个单词是它的关键 用于过滤以“a”开头的单词的比较语句可以正确地运行并打印出来,但是我过去从未使用过bash脚本,因此我不确定在尝试运行每一行/单词以找到匹配的输出时出错了什么。现在它似乎是无限期的,直到我退出它,没有可见的输出。这里有几个问题。按顺序,从第二行开始: #!/bin/bash

这就是我目前所学的课程。说明是编写一个简短的Bash脚本,逐行阅读单词列表,过滤掉任何不以字母“a”开头的单词,然后运行以查看任何给定单词的out是否与为图像whisky.jpg提供的所需摘要匹配,因为其中一个单词是它的关键


用于过滤以“a”开头的单词的比较语句可以正确地运行并打印出来,但是我过去从未使用过bash脚本,因此我不确定在尝试运行每一行/单词以找到匹配的输出时出错了什么。现在它似乎是无限期的,直到我退出它,没有可见的输出。

这里有几个问题。按顺序,从第二行开始:

#!/bin/bash
input="usr/share/dict/words"
while IFS= read -r line
do
     if [[ ${line:0:1} == "a" ]]
          then
          key="$(openssl dgst -sha1 -hmac '$line' whiskey.jpg)"
          if [[ $key == "G11a600a8dad2Gb98f18cefec4315a6c92777292" ]]
               then
               echo "$line"
          fi
     fi
done < "$input"
由于此路径不以“/”开头,因此它将被视为相对于当前目录。在前面加一个“/”。下一步:

input="usr/share/dict/words"
在这里,
“$line”
周围的单引号防止变量被扩展(它只是被视为一个文本字符串)。使用双引号代替。请注意,通常引号不会嵌套--也就是说,在另一个双引号字符串中没有双引号字符串--但在本例中,
$()
创建了一个新的引号上下文,因此嵌套可以工作。下一步:

key="$(openssl dgst -sha1 -hmac '$line' whiskey.jpg)"
这里的shell语法很好,问题是
$key
类似于“HMAC-SHA1(whisky.jpg)=G11a600a8dad2Gb98f18cefec4315a6c92777292”,并且比较字符串只匹配该字符串的结尾。但是在
[[]]
内部,
==
操作符可以进行通配符比较,因此如果[[$key==*“G11a600a8dad2Gb98f18cefec4315a6c92777292”],则添加一个通配符:

最后,脚本在找到匹配项后不会退出,它将搜索Word文件的其余部分以查找更多匹配项。因此,当找到匹配项时,在
echo
之后添加
exit

以下是这些修复的结果:

if [[ $key == "G11a600a8dad2Gb98f18cefec4315a6c92777292" ]]

引用/转义看起来有点奇怪,但是您可以看到,
$line
没有得到扩展,并且
$key
包含“HMAC-SHA1(whisky.jpg)=”以及散列。

这里有几个问题。按顺序,从第二行开始:

#!/bin/bash
input="usr/share/dict/words"
while IFS= read -r line
do
     if [[ ${line:0:1} == "a" ]]
          then
          key="$(openssl dgst -sha1 -hmac '$line' whiskey.jpg)"
          if [[ $key == "G11a600a8dad2Gb98f18cefec4315a6c92777292" ]]
               then
               echo "$line"
          fi
     fi
done < "$input"
由于此路径不以“/”开头,因此它将被视为相对于当前目录。在前面加一个“/”。下一步:

input="usr/share/dict/words"
在这里,
“$line”
周围的单引号防止变量被扩展(它只是被视为一个文本字符串)。使用双引号代替。请注意,通常引号不会嵌套--也就是说,在另一个双引号字符串中没有双引号字符串--但在本例中,
$()
创建了一个新的引号上下文,因此嵌套可以工作。下一步:

key="$(openssl dgst -sha1 -hmac '$line' whiskey.jpg)"
这里的shell语法很好,问题是
$key
类似于“HMAC-SHA1(whisky.jpg)=G11a600a8dad2Gb98f18cefec4315a6c92777292”,并且比较字符串只匹配该字符串的结尾。但是在
[[]]
内部,
==
操作符可以进行通配符比较,因此如果[[$key==*“G11a600a8dad2Gb98f18cefec4315a6c92777292”],则添加一个通配符:

最后,脚本在找到匹配项后不会退出,它将搜索Word文件的其余部分以查找更多匹配项。因此,当找到匹配项时,在
echo
之后添加
exit

以下是这些修复的结果:

if [[ $key == "G11a600a8dad2Gb98f18cefec4315a6c92777292" ]]

引用/转义看起来有点奇怪,但是您可以看到,
$line
没有得到扩展,
$key
包含“HMAC-SHA1(whisky.jpg)=”以及散列。

如果告诉您使用
shasum
命令,为什么要使用
openssl
?我也不明白单词的shasum和图像文件的shasum有什么关系。你应该对文件名或文件内容进行求和吗?它实际上是永远运行,还是只是缓慢运行?特别是如果文件很大,则计算每个哈希值需要一点时间,因此重复多次可能需要一点时间。建议:在内部测试中添加
else echo“Nope,$line不是吗”
,这样您就可以看到每个测试的发生。这与您的Bash问题没有直接关系,但是:您误用了术语“key”和“digest”。这里的“键”是字典中的单词(=行)
G11a600a8dad2Gb98f18cefec4315a6c92777292是一个“HMAC”。错误的标题:
Write me a bruteforce script
更合适……你可以简化
[${line:0:1}==“a”]
[$line==a*]
如果你被告知要使用
shasum
命令,为什么要使用
openssl
?我也不明白单词的shasum和图像文件的shasum有什么关系。你应该对文件名或文件内容进行求和吗?它实际上是永远运行,还是只是缓慢运行?特别是如果文件很大,则计算每个哈希值需要一点时间,因此重复多次可能需要一点时间。建议:在内部测试中添加
else echo“Nope,$line不是吗”
,这样您就可以看到每个测试的发生。这与您的Bash问题没有直接关系,但是:您误用了术语“key”和“digest”。这里的“键”是字典中的单词(=行)
G11a600a8dad2Gb98f18cefec4315a6c92777292是一个“HMAC”。错误的标题:
给我写一个暴力脚本更合适……你可以简化
[${line:0:1}==“a”]]
->
[$line==a*]