2014-01-18 34 views
-2

當我嘗試將密碼變量編碼到md5sum中時,它給了我一個字符串,其末尾的md5sum編碼爲。當我嘗試在它之後加入破折號時,它不起作用。所以我的問題是: 如何刪除linux終端的md5sum輸出中的破折號。這裏是我的代碼:在linux上刪除' - 'md5sum

#!/bin/bash 

read -p 'Password: ' passwordInput 
Password=$(echo -n "$passwordInput" | md5sum) 
if [ $Password = "0cbc6611f5540bd0809a388dc95a615b" ]; then 
    clear 
    echo "Password is good" 
else 
    clear 
    echo "Password is bad" 
fi 
exit 0; 

回答

4
#!/bin/bash 

read Test 
Password=$(echo -n "$Test" | md5sum | cut -d' ' -f1) 
echo "" 
if [ $Password = "d41d8cd98f00b204e9800998ecf8427e" ]; then 
     clear 
     echo "WhOop WHOop" 
else 
     echo ":(" 
fi 
+0

你可以使用bash模式替換,而不是''cut'中的''如果[$ {Password/- } =「d41d8cd98f00b204e9800998ecf8427e」];'' –

0

的 「 - 」 的的md5sum表明,你正在使用的md5sum標準輸入。如果您將文件使用md5sum,則會在該位置顯示文件名。

3

你有三個問題。

首先,你的問題不是很清楚。請更新它,清楚地說明你正在問什麼(你希望你的程序如何行爲,以及它如何不這樣做)。在這種情況下,從代碼中找出並不難,但事實並非如此。你寫

我沒有從linux md5sum中得到「 - 」。

但實際上問題是,你得到「 - 」(甚至更多爲好)。

其次,md5sum的輸出在顯示的校驗和之後包含一些額外信息,您需要將其刪除。 (如果md5sum有一個選項可以打印只是的校驗和,那會很好,但它不會。)幸運的是,很容易去除額外的信息;它只是一個空間角色和跟隨它的一切。

第三,因爲您使用單引號:

Password="$(echo -n '$Test' | md5sum)" 

你傳遞給md5sum字符串字面'$Test',你變的不是值。

固定的第二和第三個問題:

#!/bin/bash 

read Test 
Password="$(echo -n "$Test" | md5sum | sed 's/ .*$//')" 
echo "" 
if [ "$Password" = "d41d8cd98f00b204e9800998ecf8427e" ]; then 
    clear 
    echo "WhOop WHOop" 
else 
    echo ":(" 
fi 

我通常批評你的clear命令的使用,但在這種情況下,你要刪除用戶輸入的密碼。但是如果用戶輸入不正確的密碼,則不會清除屏幕。 Bash的read命令有一個選項來抑制輸入的回顯,這是它的完美用法。以下是我可以做到這一點:(順便說一句,空字符串是一個糟糕的密碼,是什麼,其的md5sum可以用快速谷歌搜索可以找到)

#!/bin/bash 

read -p "Password: " -s Test 
Password="$(echo -n "$Test" | md5sum | sed 's/ .*$//')" 
echo "" 
if [ "$Password" = "d41d8cd98f00b204e9800998ecf8427e" ]; then 
    echo "WhOop WHOop" 
else 
    echo ":(" 
fi