在Linux上去掉md5sum中的横线

9

当我尝试将密码变量编码为md5sum时,它会给我一个带有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个回答

18
#!/bin/bash

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

你可以使用BASH模式替换而不是cut,例如if [ ${Password/ -} = "d41d8cd98f00b204e9800998ecf8427e" ]; - Dima Chubarov
4
如果您不喜欢cut,则也可以使用awkecho "$Test" | md5sum | awk '{print $1}' - Benjamin Vison

5

您有三个问题。

首先,您的问题不是很清楚。请更新问题,明确说明您想让程序如何运行以及它未能如此。在这种情况下,从您的代码中弄清楚并不太难,但并非总是如此。您写道

我无法从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 命令有一个选项可以抑制输入的回显,并且这是它的完美用途。以下是我可能会这样做的方式:

#!/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

(顺便提一下,空字符串是一个糟糕的密码,像 "Test" 这样的密码可以通过快速的谷歌搜索找到其 md5sum 值。)

1
继续@user1918305的建议,md5将对字符串输入进行操作。
例如:
#!/bin/bash

$ printf "hello world" | md5sum
5eb63bbbe01eeed093cb22bb8f5acdc3  -
$ printf "hello world" | md5sum | grep -o '^\S\+'
5eb63bbbe01eeed093cb22bb8f5acdc3
$ printf "hello world" | md5
5eb63bbbe01eeed093cb22bb8f5acdc3

1
这是答案。 - Luis

1
在md5sum中的"-"表示您正在使用标准输入进行md5sum。如果您要将md5sum用于文件,则该位置将显示文件名。

1
printf '%s' 'some string' | md5sum | cut -d ' ' -f 1 - MTMDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接