首页 > 解决方案 > Bcrypt/Spring Security 对表情符号和汉字的支持

问题描述

我目前正在尝试对 bcrypt/spring 安全实现 (UTF-8/$2b$) 进行修复

我的问题特定于非拉丁语、非数字密码散列

在所有情况下,我都将密码设置为管理员,在 Windows 机器上,使用拉丁语言虚拟键盘,然后尝试使用我刚刚设置为管理员的密码以目标用户身份登录:

a.) 混合字母数字密码,以包含表情符号、空格和汉字的字母数字字符开头。

b.) 仅限同一类型的多个表情符号

c.) 一个表情符号

d.) 以包含表情符号、空格和汉字的表情符号开头的混合字母数字密码。

e.) 纯非拉丁语、非数字密码(汉字)

除 a 以外的所有情况都可以由管理员设置(我怀疑管理员权限会忽略对密码的所有检查),但不能用于非管理员目标用户登录

据我所见,散列是正确形成的,具有适当的 bCrypt 结构。

当光标沿行移动时,密码屏蔽将跳过字符。它将对第一个表情符号(由**表示)进行分组,但只会遍历*而不是**。这有效地导致每 2 次光标移动遍历 1.5 个表情符号。

最初我认为这是字符集的问题,或者 bCrypt 的版本或编码标准可能在解码时覆盖定义的编码(UTF-8)。您是否需要明确定义解码标准和编码标准?是否存在即使它们被定义(在任一方向)编码标准被覆盖的情况?

可能是我看错了,但我对 spring-security 平台的了解有限,而且我所看到的实现几乎是开箱即用的。

TLDR:如何使用 Spring Security 在密码中获得表情符号和非拉丁语言支持?

标签: spring-securityunicodeutf-8emojibcrypt

解决方案


推荐阅读