3

当用户输入最能以 Unicode 或其他非拉丁字符编码表示的内容时,您如何处理服务密码?

具体来说,您可以使用西里尔密码作为 Oracle 的密码吗?如果密码以 UTF-8 格式提供,您如何根据 Windows 身份验证机制验证用户密码?

我对如何在我们的代码中处理这个问题有一些想法,但我正在寻求其他人的建议,以确保我们的方向是正确的。

4

2 回答 2

1

编码本身不应该对加密造成问题,大多数算法都对字节而不是字符进行操作。唯一可能出现问题的是:如果密码中使用了外来(非 ASCII)字符,则使用不同的编码加密相同的密码可能会产生不同的值。不过,将密码转换为固定编码(如 UTF8)应该可以解决这个问题。

于 2008-12-10T10:08:18.197 回答
1

您可能会遇到身份验证机制长度限制的问题。

例如,如果系统指定最大长度为 12 字节,这很容易被 utf-8 中的五个汉字超过,这不是问题,因为四个汉字应该有足够的熵,但是,你需要小心错误信息。

如果身份验证机制强制执行诸如“大写、小写、标点符号和数字字符中的至少一个”之类的规则,则可能会出现其他问题 - 几种语言没有大写/小写字符,并且在 unicode 中定义了许多本地字符说话者会认为是数字,但可能不会被执行不力的规则识别为数字。

于 2008-12-10T15:02:52.393 回答