【发布时间】:2012-05-10 18:12:38
【问题描述】:
我想从 Android 上的用户那里获取密码字符串。
我不希望在从用户键入它到它以 char 或 byte 数组形式到达我的代码的过程中的任何时间点将这个字符串存储在 Java 字符串中。
原因是 Sun 禁止将 Java 字符串用于敏感数据。 “String 类型的对象是不可变的,即没有定义允许您在使用后更改(覆盖)或清零 String 内容的方法。此功能使 String 对象不适合存储安全敏感信息,例如用户密码。您应该始终将安全敏感信息收集并存储在 char 数组中。" http://docs.oracle.com/javase/1.5.0/docs/guide/security/jce/JCERefGuide.html#PBEEx
所以我不能使用 EditText,因为它在内部使用字符串(即使它返回一个可以想象由 char[] 或 Char[] 支持的 Editable?)。
从用户那里接受 char 数组的最简单方法是什么?我猜是我在其上监听关键事件的 Canvas?
【问题讨论】:
-
如果您还没有阅读这篇文章,我建议您阅读:mail-archive.com/android-security-discuss@googlegroups.com/…
-
感谢您提供该讨论的链接。讨论反映了下面列尼克提供的论点。由于他的建议所附评论中的原因,我对此不以为然。
-
不可变也有安全原因:javafaq.nu/java-article1060.html
标签: android string security textview