【问题标题】:Block double byte chars in a textbox在文本框中阻止双字节字符
【发布时间】:2012-11-06 12:03:06
【问题描述】:

我正在开发 WPF .net 3.5 应用程序。

由于内置密码框存在安全问题,我需要创建自己的密码框。 新的 PasswordwordBox 基于常规 TextBox。

一切正常,只有在 WPF 密码框中双字节字符被阻止,我想将此行为也添加到我的新密码框。

我该怎么做?

【问题讨论】:

  • 什么是双字节字符,为什么要阻止它们?为什么基于TextBox 的密码框比内置密码框更安全?
  • 很多问题 :) 在中文中你需要 2 个字节来表示一个字符,所以当你按下键盘中的一个键时,会打开一个小窗口,里面有可供选择的字符数(这意味着,例如,如果您按下“G”,则可能意味着多个字符)。这对于密码框是不可接受的,因为这样有人可以看到您选择的密钥是什么。
  • 在这种情况下,您应该阻止 IME,而不是具有更高代码点的字符。有很多代码点高于 255 的字符是用普通键输入的。顺便说一句,因为 .net 对所有内容都使用 UTF-16(16 位 chars),每个字符至少需要 2 个字节(少数罕见的需要 4 个字节)。所以多字节字符分类不再有用了。
  • 常规密码框的问题是,例如,字符并没有真正隐藏,如果有人会运行例如 snoop - 你会看到字符并窃取密码....
  • 在 WPF 文本框中是否有阻止 IME 的方法?

标签: c# wpf textbox passwordbox


【解决方案1】:

由于您实际上想要阻止 IME 显示字符,因此您应该为密码框禁用 IME,而不是尝试阻止具有高代码点的字符。

要为某个 WPF 文本框禁用 IME,请使用:InputMethod.SetIsInputMethodEnabled(myTextBox, false)

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多