用户期望和unicode规范化

时间:2011-03-14 23:08:04

标签: unicode normalization user-experience unicode-normalization

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

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:-3)

我不会因为几个原因而烦恼:

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