JAVA面试题分享一百四十一:为什么你应该使用char[]存储密码而不是String?

字符串:

1)由于字符串在 Java 中是不可变的,如果你将密码存储为纯文本,它将在内存中可用,直到垃圾收集器清除它,并且为了可重用性,会存在 String 在字符串池中, 它很可能会保留在内存中持续很长时间,从而构成安全威胁。

由于任何有权访问内存转储的人都可以以明文形式找到密码,这是另一个原因,你应该始终使用加密密码而不是纯文本。

由于字符串是不可变的,所以不能更改字符串的内容,因为任何更改都会产生新的字符串,而如果你使用char[],你就可以将所有元素设置为空白或零。

因此,在字符数组中存储密码可以明显降低窃取密码的安全风险。

2)Java 本身建议使用 JPasswordField 的 getPassword() 方法,该方法返回一个 char[] 和不推荐使用的getTex() 方法,该方法以明文形式返回密码,由于安全原因。应遵循 Java 团队的建议, 坚持标准而不是反对它。

3)使用 String 时,总是存在在日志文件或控制台中打印纯文本的风险,但如果使用 Array,则不会打印数组的内容而是打印其内存位置。虽然不是一个真正的原因,但仍然有道理。

String strPassword =“Unknown”;
char [] charPassword = new char [] {'U','n','k','w','o','n'};
System.out.println(“字符密码:”+ strPassword);
System.out.println(“字符密码:”+ charPassword);

输出

字符串密码:Unknown
字符密码:[C @110b053

我还建议使用散列或加密的密码而不是纯文本,并在验证完成后立即从内存中清除它。

因此,在Java中,用字符数组用存储密码比字符串是更好的选择。

虽然仅使用char[]还不够,还你需要擦除内容才能更安全。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在我的项目经验中,我遇到了几个困难,以下是我在这些情况下所采取的解决方案: 1. 技术难点:在一个项目中,我们需要实现一个复杂的算法来处理大量的数据,但我们的团队缺乏相关的技术知识。为了解决这个困难,我们进行了以下步骤: - 进行专业学习:我们找到了一些相关的教材和课程,并进行了深入的学习,以便更好地理解这个算法。 - 寻求帮助:我们向一些专业的技术论坛和社区寻求帮助,向其他开发者请教他们的意见和建议,以弥补我们缺乏的知识。 - 尝试和错误:我们进行了多次的试验和测试,不断尝试各种方法,直到最终找到了一个可以解决问题的方法。 2. 时间压力:在一个项目中,我们面临着严格的时间限制,需要在短时间内完成大量的任务。为了应对这个困难,我们采取了以下措施: - 制定计划:我们制定了详细的计划,列出了每个任务的时间表和优先级,以确保我们可以在时间限制内完成所有任务。 - 分配任务:我们根据每个人的技能和能力,合理地分配任务,以确保每个人都可以充分发挥自己的优势,并在最短时间内完成任务。 - 加班:我们在必要时加班,以确保我们可以按时完成任务。 3. 沟通困难:在一个项目中,我们的团队成员来自不同的地方,有时候会有语言和文化差异,导致沟通困难。为了解决这个困难,我们采取了以下步骤: - 建立良好的沟通渠道:我们使用各种工具和平台建立了良好的沟通渠道,如在线聊天、视频会议、电子邮件等,以确保我们可以及时有效地进行沟通。 - 确定沟通方式:我们确定了最佳的沟通方式,根据不同的情况选择合适的沟通方式,以确保我们的信息能够传递到每个人。 - 尊重文化差异:我们尊重每个人的文化差异,学习和理解彼此的文化背景,以更好地理解和沟通。 总之,遇到问题时,我会采取积极的态度和有效的方法来解决它们,以确保项目能够顺利进行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值