我正在编写注册系统。我决定加密密码,让用户在密码中使用他们想要的任何东西,包括空格。
唯一的限制是: - 密码的开头或结尾没有空格 - 最少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.";
这够了吗?
我也会借此机会询问在加密密码之前和之后如何处理密码。我应该加密它然后逃脱吗?
答案 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要好得多,算法也比较困难。