谁能告诉我:
1.如何从EditText上的字符转换成字符数组,而不使用字符串
和
2.如何显示的内容在TextView或EditText中的char数组,再次不使用字符串。
我可以做到这一点,如果我使用字符串作为中间步骤,但我不想这样做是出于安全原因。EDITTEXT从字符数组&不使用字符串
-2
A
回答
0
琴弦之间的关系被存储在阵列中的数据,这将是最终GC-ED(或者可能甚至通过填充与null
阵列覆盖它,以使阵列存储器将不再包含于特定String
引用实例)。
因此,如果有人会在String
池内存中找到字符串内容(可能会比GC管理的内存池保持更长时间的完整状态),他们将必须找出阵列中的哪10个字符串在一起 - 从字符串内容本身。
然后,如果你的代码是在相同的地点和时间创建和分配数组和10个字符串,很可能String
池内存将相互分配所有10个字符串,所以即使没有数组数据它也可能容易发现这10个字符串彼此属于一起(特别是如果敏感字符串的内容与您在代码中使用的其他普通字符串不同)。
你可以考虑通过char[]
创建你自己的“SecureString”类来实现CharSequence
接口,并且有析构函数清理内容。哦,等等,这是愚蠢的Java,而不是C++。嗯...那么运气不好,你必须手动调用一些.wipe()
方法来确保那些“SecureString”实例尽快被删除,只要你愿意。
当然,如果你实施CharSequence
,这可能不是非常聪明的想法,但从安全的角度来看,它可能是最好的一些SecureString
类没有实现任何通用接口(并且重载toString
返回非敏感的东西,甚至可能删除引用地址,也许只是为了好玩的星号)。只是忍受使用它的痛苦。
0
要创建可以安全清理的密码,只要密码验证完成并且不再需要密码,请使用char[]
并填写0
。
//example password
char[] pass = {'t', 'e', 's', 't', '_', 'p', 'a', 's', 's'};
//validate your password here
boolean isValid = validatePass(pass);
//now explicitly override the password's characters
for (int c = 0; c < pass.length; c++)
pass[c] = 0;
//do something depending isValid
if (isValid) {
//show logged user or whatever
} else {
//show error message or whatever
}
相关问题
- 1. 从用户获取字符数组而不使用字符串
- 2. 从getline中提取字符数组,不使用字符串
- 3. 从EditText获取字符串
- 4. 比较edittext输入字符串数组
- 5. 从字符串修改字符数组
- 6. 字符串不从EditText取值
- 7. 从EditText到浮点数的字符串
- 8. 字符串相等构建从字符数组字符串或串接字符
- 9. 使用字符串数组将字符串转换为不同的字符
- 10. 初始化字符串数组从字符串数组资源
- 11. 不能使用字符串数组
- 12. 不能使用字符串数组offset
- 13. 数组字符串不被识别为数组字符串
- 14. 从的EditText文本与字符串中的字符数组比较
- 15. 从字符串数组
- 16. 从字符串数组
- 17. 从字符串数组
- 18. 从字符串数组
- 19. 无符号字符数组到宽字符数组/字符串
- 20. 在字符串数组上使用字符串函数(.substr)
- 21. 字符串的字符数组和字符数组至字符串转换
- 22. 使用字节数组和字符串
- 23. PHP:从字符串的数字数组
- 24. 字符串数组中的字符串
- 25. 字符串数组匹配字符串
- 26. 变换[字符串,字符串]数组
- 27. 单选字符串,字符串数组
- 28. 添加字符串,字符串数组
- 29. JSON字符串到字符串数组
- 30. Edittext给新的行字符串,而不是字符串