android BigIntegers安全吗?

92dk7w1h  于 2022-11-03  发布在  Android
关注(0)|答案(1)|浏览(65)

我使用BigIntegers来存储RSA加密的公钥和私钥。最近我发现字符串存储密码并不安全,因为它们是不可变的。BigIntegers也有同样的可卷性吗?
目前我正在重构我的代码,以便在从应用程序的一个部分发送到另一个部分时,用户键存储在字符数组中,而不是字符串中。我需要知道从这些字符数组中生成BigInteger对象对用户数据是否安全,或者我是否需要更改应用程序的这部分功能。

mnemlml8

mnemlml81#

你可以论证,byte[]BigInteger更受欢迎,理由与char[]String更受欢迎是一样的。
作为背景知识,您应该阅读Jon Skeet's answer,它解释了为什么有些人推荐使用char[]而不是String来存储密码。简单地说,数组是可变的,可以在使用后被覆盖。理论上,这会立即从内存中删除敏感数据。同时,字符串只能由垃圾收集器从内存中删除。这意味着该值会在内存中停留一段时间,这可能是问题,也可能不是问题。
String一样,BigInteger是一个包含一个数组的对象,它阻止你改变这个数组。这意味着你不能自己清除这个数组,而必须等待垃圾收集器释放它。
如果您认为这是一个问题,那么将密钥存储在字节数组中,并在使用后用零(或任何其他数据)显式覆盖数组是有意义的。至于这是否真的重要,我尊重linked question中现有的答案和注解。

相关问题