当我试图将密码变量编码到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;发布于 2014-01-18 19:31:07
#!/bin/bash
read Test
Password=$(echo -n "$Test" | md5sum | cut -d' ' -f1)
echo ""
if [ $Password = "d41d8cd98f00b204e9800998ecf8427e" ]; then
clear
echo "WhOop WHOop"
else
echo ":("
fi发布于 2014-01-18 19:43:10
你有三个问题。
首先,你的问题不是很清楚。请更新它,清楚地说明您在问什么(您希望您的程序如何运行,以及它是如何失败的)。在这种情况下,从代码中找出并不太困难,但这并不总是正确的。你写
我无法从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(顺便说一句,空字符串是一个糟糕的密码,任何md5sum都可以通过快速的Google搜索找到--比如“Test”。)
发布于 2014-01-18 19:33:22
md5sum中的"-“表示您正在为md5sum使用标准输入。如果要对文件使用md5sum,文件名将显示在该位置。
https://stackoverflow.com/questions/21208736
复制相似问题