sor*_*rin 8 passwords unicode normalization unicode-normalization text-normalization
添加对Unicode密码的支持,这是开发人员不应忽视的重要功能.
仍然,在密码中添加对Unicode的支持是一项棘手的工作,因为相同的文本可以在Unicode中以不同的方式编码,并且您不希望阻止人们因此而登录.
假设您将密码存储为UTF-8,并且请注意此问题与Unicode编码无关,而且与Unicode规范化有关.
现在的问题是你应该如何规范化 Unicode数据?
你必须确保你能够比较它.您需要确保在下一个Unicode标准发布时,它不会使您的密码验证无效.
注意:仍然有一些地方可能永远不会使用Unicode密码,但这个问题不是关于为什么或何时使用Unicode密码,而是关于如何以正确的方式实现它们.
是否可以在不使用ICU的情况下实现这一点,例如使用OS进行规范化?
一个好的开始是读取Unicode TR 15:Unicode规范化表单.然后你意识到它是很多工作并且容易出现奇怪的错误 - 你可能已经知道这个部分,因为你在这里问.最后,你下载像ICU这样的东西,让它为你做.
IIRC,这是一个多步骤的过程.首先你分解序列直到你不能进一步分解 - 例如é会变成e +'.然后,您将序列重新排序为明确定义的顺序.最后,您可以使用UTF-8或类似的方法对生成的字节流进行编码.UTF-8字节流可以输入您选择的加密哈希算法并存储在持久存储中.如果要检查密码是否匹配,请执行相同的过程并将散列算法的输出与存储在数据库中的内容进行比较.
归档时间: |
|
查看次数: |
909 次 |
最近记录: |