5

这是一个有点软的问题,如果有更好的地方,请随时告诉我。

我正在开发一些接受需要国际字符的密码的代码 - 所以我需要将输入的 unicode 字符串与存储的 unicode 字符串进行比较。很容易。

我的问题是——在这种情况下,国际字符集的用户通常期望规范化吗?我的谷歌搜索显示从“总是这样做”(http://unicode.org/faq/normalization.html)到“不要打扰”的一些意见冲突。不规范化有什么优点/缺点吗?(即,不太可能猜到密码等)

4

2 回答 2

5

我建议如果您的密码字段接受 Unicode 输入(可能是 UTF-8 或 UTF-16),那么在散列和比较之前对其进行规范化。如果您不对其进行规范化,并且人们从不同的系统(不同的操作系统或不同的浏览器,如果它是一个 Web 应用程序,或具有不同的语言环境)访问它,那么您可能会获得以不同规范化表示的相同密码。这意味着您的用户会输入正确的密码,但会被拒绝,而且原因并不明显,他们也没有任何方法可以修复它。

于 2011-03-15T04:51:43.443 回答
-3

我不会打扰有几个原因:

  1. 你会让事情变得不那么安全。如果两个或多个字符在您的数据库中都表示为相同的东西,那么这意味着该站点的可能密码较少。(虽然这可能不是什么大问题,因为可能的密码数量非常多。)
  2. 您将在您的程序中构建执行复杂工作的代码,这些工作(可能)是您未编写的库的一部分……最终有人将无法登录。在我看来,最好让事情保持简单,并相信使用不同字符集的人知道如何正确键入它们。也就是说,我从未以国际密码形式实现过这一点,所以我无法告诉你标准设计模式是什么。
于 2011-03-21T22:24:53.380 回答