我的密码挑战问题

时间:2009-10-03 03:52:40

标签: linux

我们面临着编写一个提示用户输入密码的程序的挑战。正确的密码是“我喜欢Java编程” 应该是密码在我之前和之后都有一个空格,就像我写的一样。现在,有一个条件,如果用户在正确的密码之前或之后输入超过2个或更多的空格,计算机仍会接受它!你可以帮助我吗?

3 个答案:

答案 0 :(得分:6)

用什么语言?

这是一个与语言无关的答案。

你有几个选择。

  • 你可以编写一个小的“状态机”(我在这里非常非正式地使用它来描述密码中所有字符的某种迭代器,它需要输入一定的模式),你首先检查1或更多空格,然后是中间的字符串,然后是1个或多个空格。
  • 您可以使用正则表达式。根据您的语言,可能会对正则表达式提供内置支持 - 请转到Google并输入“正则表达式”以了解更多信息。
  • 许多语言都有字符串“trim”函数,它们基本上摆脱了空格等尾随或尾随垃圾字符。您可以检查字符串的第一个和最后一个字符以确保它们是空格,然后进行修剪并检查“我喜欢Java编程”(无空格)。这样可以保证密码在中央内容中是正确的,并且每边至少有一个空格。

由于这似乎是一个家庭作业问题,我不想为你编写代码,我只想告诉你这个,你可以弄清楚如何用你需要使用的语言来实现它。

无论是代码还是后代,请确保花时间弄清楚我提出的每种方法的含义(即每种算法如何工作)以及为什么它(算法)都有效。能够理解为什么将来会帮助您解决类似的问题,并且还会让您在获得更多经验时为不同类别的问题提出自己的算法。

答案 1 :(得分:1)

这是我的聪明的aleck答案作为shell脚本:

#!/bin/sh
echo -n "Password: "
read given
if (echo "$given" | grep -x ' *I love shell scripting *' > /dev/null) ; then
    echo "Password accepted"
else
    echo "Access denied"
fi

为了确保安全,您可以散列密码:

#!/bin/bash
read -s -p "Password: " given
echo
hash=$(echo "$given" | sed 's/^ *//' | sed 's/ *$//' | sha1sum)
if [ "$hash" = "6ee322d4a87ec61912b363e704247a1dbad94975  -" ] ; then
        echo "Password accepted"
else
        echo "Access denied"
fi

我的观点是,在现实生活中,存储密码明文几乎总是一个坏主意(尽管对于这种分配安全肯定不是问题)。这是如何使密码更安全的一个相当简单的例子。

答案 2 :(得分:0)

如果您使用的是Java,请尝试使用String.trim()方法。