I18n和密码不是US-ASCII,Latin1或Win1252

时间:2008-12-09 21:39:39

标签: unicode utf-8 internationalization passwords

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可能在身份验证机制长度限制方面遇到问题。

e.g。如果系统指定的最大长度为12个字节,utf-8中的五个汉字很容易超过这个,这不是问题,因为四个汉字应该有足够的熵,但是,你需要注意错误形式交往。

如果身份验证机制强制执行“大写,小写,标点符号和数字字符中的至少一个”等规则,则可能会出现其他问题 - 几种语言没有大写/小写字符,并且在unicode中定义了数十个字符母语人士会将其视为数字,但可能无法通过执行不当的规则来识别。