没有思考它在所有我只想说,我应该让每一个字符。它被散列在任何情况下,我不希望限制谁想要创建强密码的人。

然而,考虑它更多的,有很多,我不知道他们必须对事情有什么影响的字符。外国字符,ASCII符号等来命名一对夫妇。

我试图谷歌,但我找不到什么人做任何明确的标准。即使是最专业的机构似乎并不知道。这似乎是一个普遍的做法对于许多站点干脆不允许特殊字符,这仅仅是愚蠢的,而不是我想做的事情。

总之,在那里为长度的任何标准的建议,允许的字符,等等?

我不知道,如果它很重要,但我将使用ASP.NET W / C#

有帮助吗?

解决方案

任何可打印,非空白ASCII字符(33和126(含)之间)通常允许密码。许多安全专业人员(和SO评论者)劝告使用的密码代替密码,所以你必须允许空间。的说法是,由于它们的长度,并且由于短语不是在字典中,密码短语更难比密码破解。 (A密码也可以更容易记住,所以合法用户不必把它写下来粘音符正确的监视器上。)

使用哈希强密码生成器,所以我把一个非常高限的长度(512或1024)只是为包括性的。密码发生器今天经常产生的32-128字符的字符串,但谁知道哈希将在未来几年内使用。

其他提示

非ASCII字符肯定使事情更难,当涉及到在有限的设备(手机,游戏机等)输入密码 - 但通常不是不可能的。可以说,如果用户想要做到这一点,你应该让他们。这是很容易做到合理和一致的东西 - 散列,例如之前在编码UTF-8。你只会陷入困境,如果一些输入设备发送的字符组合物(例如E +重音符号,而不是“E急性”) - 但我怀疑不会告发”吨发生在现实生活中。 (你可以自己分解一切,但是这将是一个很大的麻烦,去为一个边缘情况。)

我将其限制为可印刷字符,但是。把标签,换页等,在输入密码真正的的自寻烦恼。

不是专家,但我讨厌人物,我选择并不算离奇被拒绝。所以,我觉得我自己的直觉同意。

短的答案:允许多达系统支持它可以支持。现在真的没有理由不使用文本输入完整的Unicode支持,这包括密码。我不认为你需要,只要他们从字面上处理担心与字符的问题(但我不是一个职业在这个领域 - 当心SQL注入的)。

我对网站一个忌讳,关于密码加以限制...的任何的一种限制。我喜欢的网站,会告诉你,你的密码强度,并建议你把它强,但迫使用户键入至少8个字符,或者需要由字母和数字等,只是普通的沮丧。

如果您需要有一个最大字段大小(例如用于在数据库中存储)尽量做到任何事情,人们会手工键入足够大。这确实是一个太大的密码字段没有这样的事情,因为总是有使用自动化的,产生了浓厚的密码潜力,但64至128个字符肯定就足够了。

从根本上说,大多数的unicode类的字符的应该被允许。然而做跳跃控制字符(除了空间例如0-31),字节顺序标记(0XFFFE和oxfeff)。此外,你想先规范化表示摆脱引起不同的表述问题。尽管对于字符似乎太难以进入你可能发出警告,但用户将警惕的是自己。

记住:当您存储密码,所有密码应该与像SHA1的MD5的单向算法进行加密。由于这些算法总是产生十六进制数,你不必担心SQL注入之类的东西。

因此,只要可以MD5或SHA1一个字符时,它应该被接受。

如果你正在谈论防止攻击SQL注入式,它可能是一个更好的主意,以确保您的代码做什么是应该做的,而不是依靠限制输入使问题变得更容易。

有关非ASCII字符,我不认为这是一个更加困难的问题,如果您的输入可以被正确地表示为二进制字符串(不作为文本和),然后将其传递到您的散列函数或密钥生成器,等

添加“让用户包括他们的接口允许他们进入的任何和所有字符”另一次投票。我甚至不会禁止标签或控制字符。您的软件必须接受任意字节串和哈希他们,所以接受任意字节的字符串作为密码的能力。如果不这样做减少了攻击者必须在蛮力或字典攻击查询的空间。

(当然,即使你让一切,99%的用户仍然会使用他们的宠物的名字作为密码...)

最终,你可能在发送给用户一个confirmlation电子邮件打印出清晰的密码。

PS:还可以考虑在电子邮件编码的问题,如果它不是标准的ASCII,它可能是一个用户将不接收电子邮件以适当的格式或根本不能读取它的另一系统上(例如,日本字符)。由于字体未安装。

此所有的重量中的 “打印” 的ASCII字符的范围内。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top