当前位置: 首页 > 面试题库 >

我如何安全地擦除Java内存中的机密数据,以确保不会对其进行“优化”?

仲孙雅达
2023-03-14
问题内容
String secret="foo";
WhatILookFor.securelyWipe(secret);

而且我需要知道它将不会被Java优化器删除。


问题答案:

字符串不能被“擦除”。它是一成不变的,缺少一些真正肮脏和危险的技巧,您无法改变。

因此,最安全的解决方案是首先不要将数据放入字符串中。请改用StringBuilder或字符数组,或使用其他不可变的表示形式。(然后在完成后清除它。)

作为记录,您可以通过几种方法来更改String的后备数组的内容。例如,您可以使用反射来获取对String的后备数组的引用,并覆盖其内容。但是,这涉及到执行JLS状态具有未指定行为的操作,因此您不能保证优化程序不会执行意外操作。

我个人的看法是,最好锁定应用程序平台,以防止未经授权的人员首先无法访问内存/内存转储。毕竟,如果平台没有得到适当的保护,则“坏蛋”可能能够在删除字符串之前获得其内容。对于少量的安全关键状态,可能需要采取这样的步骤,但是如果您要处理大量的“机密”信息,则无法使用常规字符串和字符串处理将是一大麻烦。



 类似资料:
  • 问题内容: 如何将用户输入的密码存储在内存中,并在不再需要时安全地擦除它? 为了详细说明,目前我们有以下代码: 调用该方法后,我们该怎么办才能用乱码填充包含密码的内存区域,以使某人无法通过执行核心转储来恢复密码? 可以用Python完成吗? 问题答案: Python对内存的控制没有那么低。接受它,继续前进。在 最好的 ,你可以做的是调用后,这样的口令字符串对象的引用依然存在。任何声称能够做得更多的

  • 在flutter应用程序中存储key.jks文件对于flutter应用程序发布是安全的吗? 存储库密码、keyPassword、keyAlias 我的key.properties文件:

  • 我最近一直在寻找一个如何在CentOS 7中安全保存git凭证的解决方案。 我想保存多个git存储库的凭据。 我想出的解决方案是将侏儒密钥环与任何版本的git一起使用。但我遇到了一些问题。我发现很多帖子说这在Redhat 7或Centos 7中不是一个好的解决方案。,它将被弃用。 但这对我不起作用,使用git时出错: 与gnome-keyring-daemon通信时出错 然后我把git升级到最后一

  • Java为URL编码字符串提供了类。但是将密码存储为字符串被认为是不安全的。通过输出流通过POST发送密码的代码是否足够安全? 一方面,它在使用字符串。另一方面,这些字符串只有1个字符长,编码后在概念上是相同的。而且,在我看来,这可能会在多字节字符上失败。攻击者是否能够在内存中找到这些1-char字符串并重建原始密码?有没有更好的办法做到这一点?

  • 本文向大家介绍Android 使用密码以安全方式对数据进行AES加密,包括了Android 使用密码以安全方式对数据进行AES加密的使用技巧和注意事项,需要的朋友参考一下 示例 以下示例使用AES加密给定的数据块。加密密钥以安全的方式派生(随机盐,1000轮SHA-256)。加密使用具有随机IV的CBC模式下的AES。 请注意,存储在类数据EncryptedData(salt,iv,和encryp

  • 问题内容: 我在版本控制系统中保留了重要的设置,例如开发和生产服务器的主机名和端口。但是我知道,将秘密(例如私钥和数据库密码)保存在VCS存储库中是一种不好的做法。 但是密码-像其他设置一样-似乎应该进行版本控制。那么保持密码版本控制的正确方法是什么? 我想这将涉及保持秘密,在自己的“秘密设置”文件,并有该文件的加密和版本控制。但是什么技术呢?以及如何正确执行此操作?有没有更好的方法可以完全解决这