如何正确实施 Unicode 密码?

2024-06-18

添加对 Unicode 密码的支持是开发人员不应忽视的重要功能。

尽管如此,在密码中添加对 Unicode 的支持仍然是一项棘手的工作,因为相同的文本可以在 Unicode 中以不同的方式进行编码,并且您不希望因此阻止人们登录。

假设您将密码存储为 UTF-8,请注意这个问题与 Unicode 编码无关,而是与Unicode 规范化.

现在的问题是你应该如何正常化Unicode 数据?

您必须确保能够进行比较。您需要确保下一个 Unicode 标准发布时不会使您的密码验证失效。

注意:仍然有一些地方可能永远不会使用 Unicode 密码,但这个问题与为何或何时使用 Unicode 密码 https://stackoverflow.com/questions/1797777/should-i-support-unicode-in-passwords,这是关于如何以正确的方式实施它们。

第一次更新

是否可以在不使用 ICU 的情况下实现这一点,就像使用操作系统进行标准化一样?


阅读是一个好的开始Unicode TR 15:Unicode 规范化形式 http://unicode.org/reports/tr15/。然后你意识到这是一项繁重的工作并且容易出现奇怪的错误 -你可能已经知道这部分了,因为你在这里问。最后,你下载类似的东西ICU http://site.icu-project.org/ and 让它为你做 http://userguide.icu-project.org/transforms/normalization.

IIRC,这是一个多步骤的过程。首先,分解序列直到无法进一步分解 - 例如 é 将变成 e + ´。然后将序列重新排序为明确的订购。最后,您可以使用 UTF-8 或类似的方式对生成的字节流进行编码。 UTF-8 字节流可以输入您选择的加密哈希算法并存储在持久存储中。当您想要检查密码是否匹配时,请执行相同的过程并将哈希算法的输出与数据库中存储的内容进行比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确实施 Unicode 密码? 的相关文章

随机推荐

  • 向 Serilog 添加自定义属性

    我在应用程序中将 Serilog 与 MS SQL Server 接收器一起使用 假设我已经定义了以下类 public class Person public string FirstName get set public string L
  • CKEditor 禁用自动编辑 HTML 代码

    我需要在我的 CREditor 之一中禁用自动编辑代码 如果我将此代码作为 HTML 放置 div class kontaktJeden div class obr img src images insol png alt div div
  • 优化 SQL Server 上的删除

    Deletesql server 上的有时很慢 我经常需要优化它们以减少所需的时间 我一直在谷歌上搜索一些关于如何做到这一点的提示 并且我发现了各种各样的建议 我想知道你最喜欢和最有效的驯服删除野兽的技术 以及它们如何以及为什么起作用 到目
  • 学说 dbal querybuilder 作为准备好的语句

    我正在尝试创建一个 Doctrine DBAL 查询生成器对象并在其中设置一个参数 使用 postgres db dbal 2 3 4 原则 connection this gt em gt getConnection qb connect
  • 注入的 HttpContext 始终为 null

    老实说 这太令人兴奋了 我无法让它发挥作用 无论注入到何处 上下文始终为空 我是否必须在 Startup cs 中添加上下文实例 如果是 怎么办 始发呼叫 services AddTransient
  • NGINX 返回 405 不允许使用 POST 方法

    我有这个default conf server listen 443 ssl root etc nginx json server name myserver com ssl certificate etc ssl certs server
  • 如何使用正则表达式将多个
    标签替换为一个
    标签?

    I want br br 变成 br 正则表达式的模式是什么 注 br 标签可以连续出现两次以上 html preg replace br gt s i br html 这将捕获任何组合 br br or br 它们之间有任意数量或类型的空
  • paramiko ssh.connect - 要发送什么参数?

    我真的很新python and ssh 我正在尝试编写一个简单的程序来打开ssh连接使用python 我已经有了paramiko 但我遇到的问题是 使用终端我使用以下命令打开我的ssh ssh username email protecte
  • 存档期间的位码编译永远不会完成

    我正在准备一个通过 Test Flight 进行临时分发的应用程序 我已经 成功 完成了这篇 Ray Wenderlich 文章中的所有准备步骤 https www raywenderlich com 48750 testflight sd
  • 如何编写可以与操作系统交互的VLC插件

    我需要找出是否有可能以及如何 我不关心C C Lua Python 制作一个VLC插件 其目的是由VLC播放器在特定时间调用视频流的将执行一些操作 我需要做的操作是打开 UDP 套接字并发送从当前播放的视频附带的文件中读取的一些数据 我需要
  • 如何在 C++ 中取消引用指向对象指针映射的指针? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在下面的示例中 我想访问employeeID从课堂上Employee通过使用指针employeePayroll class Employee
  • Pandas Dataframe 在由索引分隔的部分中进行插值

    我的示例代码如下 import pandas as pd dictx col1 1 nan nan nan 5 nan 7 nan 9 nan nan nan 13 col2 20 nan nan nan 22 nan 25 nan 30
  • jQuery 验证插件,两个字段之一是必需的

    我有一个包含 2 个字段的表单 手机号码 和电话号码 至少必须填写其中 1 个字段 但也可以同时填写两个字段 如果它们都没有被填充 我需要 jquery validate 来抛出错误 我通过以下方式实现了这一点 rules mobile r
  • 熊猫:什么是视图?

    请帮助我理解 什么是view在熊猫中 我知道如果我们改变一些东西view我们总是对原始对象进行更改 但物体的视图和原始物体有不同id s例如 这是否意味着view是另一个对象引用原始对象吗 机制是什么 我尝试过但找不到解释 import p
  • Robolectric AndroidX 片段 NoClassDefFoundError

    代码和测试迁移到之后AndroidX 一切似乎都工作得很好 但是 Robolectric junit 测试两个片段失败了 因为NoClassDefFoundError androidx fragment testing R style例外
  • 如何从内存加载值而不污染缓存?

    我想读取内存位置而不污染缓存 我正在 X86 Linux 机器上工作 我尝试使用 MOVNTDQA 汇编指令 asm movntdqa source dest n t dest x my var source m my mem 0 memo
  • ExtensionInstallForcelist 不断阻止本地扩展

    我试图通过注册表强制安装本地扩展 一旦我配置了注册表文件 chrome 就会向我显示单词 BLOCKED 参见屏幕截图 我制作了一个 Reg 文件来配置它 在某些计算机上运行良好 但其他计算机则阻止它 为了安全起见 我更改了一些 ID 并隐
  • 为什么 B = numpy.dot(A,x) 执行 B[i,:,:] = numpy.dot(A[i,:,:],x) ) 的循环速度慢得多?

    我得到了一些我无法解释的效率测试结果 我想组装一个矩阵 B 其第 i 个条目 B i A i dot x 其中每个 A i 是一个 2D 矩阵 x 也是如此 我可以通过三种方式做到这一点 为了测试我随机制作的性能 numpy random
  • 如何全局忽略 UTF-8 字符串中的无效字节序列?

    我有一个 Rails 应用程序从 Rails 版本 1 以来的迁移中幸存下来 我想忽略all其上的无效字节序列 以保持向后兼容性 我不知道输入编码 示例 gt Men xFC split n ArgumentError invalid by
  • 如何正确实施 Unicode 密码?

    添加对 Unicode 密码的支持是开发人员不应忽视的重要功能 尽管如此 在密码中添加对 Unicode 的支持仍然是一项棘手的工作 因为相同的文本可以在 Unicode 中以不同的方式进行编码 并且您不希望因此阻止人们登录 假设您将密码存