谁能告诉我:
1.如何在不使用字符串的情况下将EditText中的字符转换为char数组
和
2.如何在TextView或EditText中显示char数组的内容,而不使用字符串
如果我使用字符串作为中间步骤,我可以这样做,但出于安全原因,我不想这样做。
答案 0 :(得分:0)
字符串之间的关系存储在数组数据中,最终将进行GC编辑(或者您甚至可以通过用null
填充数组来覆盖它,因此数组内存将不再包含引用特定String
个实例)。
因此,如果有人会在String
池内存中找到字符串内容(可能会保留完整的时间比GC管理的内存池长得多),那么他们必须弄清楚哪些10个字符串在一起数组 - 来自字符串内容本身。
然后,如果你的代码在同一个地方和时间创建和分配数组和10个字符串,那么String
池内存很可能会将所有10个字符串分配到彼此附近,所以即使没有数组数据可能很容易发现这10个字符串彼此属于(特别是如果敏感字符串的内容与您在代码中使用的其他普通字符串不同)。
您可以考虑创建自己的“SecureString”类,在CharSequence
上实现char[]
接口,并让析构函数清理内容。哦等等,这是愚蠢的Java,而不是C ++。嗯...运气不好,你必须手动调用一些.wipe()
方法,以确保那些“SecureString”实例尽快消失,如你所愿。
当然你必须保护自己不要把它们投入String
......如果你实施CharSequence
这可能很容易发生,所以从安全角度来看,这可能不是很聪明的主意看来最好有一些SecureString
类没有实现任何通用接口(并且重载toString
来返回非敏感的东西,甚至可能删除参考地址,也许只是为了好玩的几个星号) 。并且忍受使用它的痛苦。
答案 1 :(得分:0)
不使用String即可将EditText直接读入charArray。
val password:CharArray = CharArray(editText.length())
editText.text.getChars(0, editText.length(), password, 0)
不使用String即可写入editText
editText.setText(password, password.size, 0)