2016-08-21 209 views
1

我目前正在使用bash腳本測試一個簡單的字典攻擊。我已經簡單地鍵入以下命令編碼我的密碼「蛇」與sha256sum:Bash腳本IF語句不起作用

echo -n Snake | sha256sum 

這產生如下:

aaa73ac7721342eac5212f15feb2d5f7631e28222d8b79ffa835def1b81ff620 *- 

我然後複製粘貼的散列串入程序,但腳本沒有做到打算做的事情。這個腳本(請注意,我創建了一個測試字典文本文件,該文件只包含6行):

echo "Enter:" 
read value 

cat dict.txt | while read line1 
    do 
      atax=$(echo -n "$line1" | sha256sum) 

      if [[ "$atax" == "$value" ]]; 
      then 
        echo "Cracked: $line1" 
        exit 1 
      fi 

    echo "Trying: $line1" 

    done 

結果:

Trying: Dog 
Trying: Cat 
Trying: Rabbit 
Trying: Hamster 
Trying: Goldfish 
Trying: Snake 

代碼應顯示「破解:蛇」並終止時,它將散列字符串與單詞「Snake」進行比較。我哪裏錯了?

編輯:該錯誤確實是我的文本文件中的DOS行。我做了一個unix文件和校驗和匹配。感謝大家。

+0

後也順便說一句,運行'bash的-x yourscript'會給你什麼是這裏發生了一個更好的想法。 –

+2

......另一方面,'echo -n'實際上並不是很好的形式。'echo'的POSIX規範將'-n'描述爲「未指定」,這意味着實現可以在給出該參數時做任何事情 - 它可以在其輸出上抑制換行,但也可以在輸出上打印「-n」並且符合要求 - 並且在啓用「xpg_echo」和「posix」選項的情況下運行時,bash的行爲就是如此。 –

+0

...參見http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html中的上述規範,特別是APPLICATION USAGE部分,該部分使用'printf'提供替代建議來模擬常見的'echo'用法。 –

回答

1

夫婦的問題 - 變量名稱沒有設置任何地方 - 你的意思是價值?也更好的形式來使用重定向代替cat

while read ...; do ... done <dict.txt 

變量由while循環管道中的設定是不是在父shell可沒有倒過來,因爲我誤之前說的 - 這不是一個問題,這裏雖然

+2

不是我的downvote。確實沒有設置「名稱」。子殼不能訪問外殼中設置的變量。 (反之亦然。) – kojiro

+0

嘿,謝謝你的回覆。我嘗試了你的建議,但沒有奏效。編輯:我沒有downvote。 – Bane

1

一個問題是,正如pakistanprogrammerclub指出的那樣,您從未初始化name(而不是line1)。

另一個問題是,sha256sum不只是打印出校驗和,還有*-(意思是「我從二進制模式的標準輸入讀取文件」)。

我不知道是否有一個乾淨的方式得到公正校驗—有可能是,但我不能找到它—但你至少可以寫這樣的事:

atax=$(echo -n "$name" | sha256sum | sed 's/ .*//') 

(使用sed剝離空間中的所有東西)。

+1

或者您可以使用'awk'{print $ 1}''或調用'cut'。 – kojiro

0

感謝您的回覆。 Pakistanprogrammerclub指出了一個很好的錯誤。 「名稱」變量不應該在那裏。我已經糾正,並使用「sed的」和「AWK」命令也試過了,但它仍然產生相同的結果:

echo "Enter:" 
read value 

cat dict.txt | while read line1; 
do 
     atax=$(echo -n "$line1" | sha256sum | sed 's/ .*//') 

     if [[ "$atax" = "$value" ]]; 
     then 
       echo "Cracked: $line1" 
       exit 1 

     fi 

echo "Trying: $line1" 

done 
+0

這應該是對問題的編輯,而不是回答,除非它實際上提供瞭解決方案。 –

+0

順便說一句,你知道你的'dict.txt'是一個UNIX文件嗎?如果它有DOS換行符,那就是你的錯誤。 –

+0

謝謝你的迴應Charles,對不起,我是一個新來的人。我嘗試了bash -x yourscript,而你是對的。校驗和是不同的,我認爲這是因爲我的文本文件。我現在會解決這個問題,看看會發生什麼。 – Bane

0

可能是一個切ñ粘貼錯誤 - 添加回聲後的第一次讀

echo "value \"$value\"" 

atax設置

echo "line1 \"$line1\" atax \"$atax\""