为什么我们从控制台读取字符数组而不是字符串的密码

罗希特·贾恩(Rohit Jain):

可能重复:
为什么使用char []而不是使用字符串作为密码?

当我准备工作时,OCPJP遇到了一个主题-“从控制台读取用户输入”。

有一个示例,它usernameString引用中读取,而passwordchar[]数组中读取,但是我不明白为什么它使用char数组。这是代码:-

Console console = System.console();

String username = console.readLine("User Name? ");
char[] password = console.readPassword("Password? "); 

这在我的脑海中引起了疑问。为什么我们不使用String引用存储密码。由于Strings它们是不可变的,因此读取字符串中的密码必须更加安全,因为无法更改其内容。

那么,什么是阅读整点passwordchar[]阵列..

谁能在这件事上阐明一点?

caarlos0:

正如您所说的那样,字符串是不可变的,这意味着一旦创建了字符串,如果另一个进程可以转储内存,就无法(好的,可以通过反射)在GC启动之前就摆脱掉数据。

使用数组,您可以在使用完数据后显式擦除数据:您可以使用所需的任何内容覆盖该数组,并且即使在垃圾回收之前,密码也不会出现在系统中的任何位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么从控制台读取字符串时scanf中的%n返回0

为什么我无法在Javascript上控制台记录/字符串化整个数组?

为什么我们在Rails记录器中使用块而不是字符串?

为什么我们使用自定义类型而不是字符串?

如何从Java控制台应用程序中的扫描程序读取字符串?

从控制台读取字符

如何从核心控制台appSettings.json文件获取字符串数组

从控制台读取多字字符串

读取Java中的控制台字符串

为什么我们不能为XML名称空间使用随机字符串而不是URI?

为什么我们应该为字符串数据类型而不是其余的数据导入#include <string>?

为什么我们在mac-address字符串前面有连字符

我们如何从长字符串中提取字符串的特定部分?

为什么我们不能在javascript中修改字符串长度,因为我们可以修改数组的长度?

为什么我的.indexOf不读取字符串中字符的位置

为什么我们不能将字符串值分配给2d char数组?

控制台继续输出在Swift中包装为Optional的字符串,为什么?

为什么控制台无法打印我期望的字符

为什么我们在 sql 中检查字符串值时会出错

为什么我们可以通过添加“ g”将字符串替换为sed?

为什么我们在大多数当前协议中发送字符串的长度

为什么我们不需要对象来存储字符串数据?

为什么我们不能在python中更改字符串的特定值

理解为什么我们在 Python 中对字符串使用方法

为什么我们需要在字符串中获取单词

我们到底可以在Process.exec()的字符串数组中存储什么?

为什么我无法从Android中的服务读取字符串资源

为什么我不能用C编程语言的fgets读取字符串?

从控制台窗口隐藏密码Java星号密码或显示的已阻止输入字符串