密码验证问题

时间:2011-11-07 21:40:35

标签: php

我正在编写注册系统。我决定加密密码,让用户在密码中使用他们想要的任何东西,包括空格。

唯一的限制是: - 密码的开头或结尾没有空格 - 最少5个字符和最多30个字符

// CHECK PASSWORD    
    } elseif ((substr($password, 0, 1) == " " || substr($password, -1, 1) == " ")){ 
        $msg = "You cannot have a space in the beginning or end of your password.";

    } elseif (strlen($password) > 30)) {
        $msg = "Your password cannot be longer than 20 characters.";


    } elseif (strlen($password) < 5)) {
        $msg = "Your password cannot be shorter than 5 characters.";

这够了吗?

我也会借此机会询问在加密密码之前和之后如何处理密码。我应该加密它然后逃脱吗?

2 个答案:

答案 0 :(得分:2)

您要寻找的不是加密,而是散列。 hash algorythm采用一些任意值并将其转换为固定大小的字符串。它非常适合这种情况,因为哈希算法是单向的,即你可以对某些内容进行哈希处理,但你不能解开它。

为了更加安全,您可以添加“盐”。避免彩虹表。彩虹表是已知计算的已知单词哈希表。例如,用户的密码为&#34; apple&#34;它产生哈希&#34; XABC&#34;。如果一个黑客拥有哈希&#34; XABC&#34;,他会去彩虹表并查找产生哈希&#34; XABC&#34;的单词。由于苹果是一个常用词,因此它的哈希值也是如此,它可能会出现在表格中。由于盐在散列发生之前添加,因此避免了这种情况。你只需将它连接到要散列的字符串。因此,如果用户使用密码&#34; apple&#34;,您的脚本不会哈希苹果,那么哈希&#34; saltedapple&#34;没有loger产生已知的哈希&#34; XABC&#34;。 &#39; saltedapple&#39;不是一个已知的词,它不太可能在彩虹表中。 &#39;盐腌&#39;这是一个非常简单的盐,但使用&#39; $ ZX?(&#39;会生成&#39; $ ZX?(苹果&#39;我能保证你不会在任何彩虹表中)。

答案 1 :(得分:-1)

您可以trim($password)

而不是检查开头和字符串中的空格

您根本不需要加密密码。只需用

之类的东西加密它
function encryptPassword($enteredPassword) {
   return md5(sha1($enteredPassword);
}

并在加密后使用相同的存储密码验证用户输入的密码;

P.S。使用mcrypt要好得多,算法也比较困难。