gpt4 book ai didi

java - 使用字符数组代替字符串

转载 作者:行者123 更新时间:2023-12-02 00:21:48 26 4
gpt4 key购买 nike

我们有一个安全建议,在存储密码时使用字符数组而不是字符串,然后清除字符数组。但问题是,某些 jar 接受字符串作为参数。

例如,org.apache.http.auth.UsernamePasswordCredentials 需要两个字符串参数;一份用于密码,一份用于用户名。现在,如何在不创建密码字符串的情况下调用此函数

httpClient.getCredentialsProvider().setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(user.getUsername(), new String(user
.getPassword())));

我该如何解决这个问题。有什么方法可以存储密码。据我所知,字符串是不可变的,不建议在字符串中存储密码。那么我可以做什么替代方案

最佳答案

因此,安全建议将密码存储为字符数组的原因是,与数组不同,字符串是不可变的。这基本上意味着一旦您创建了字符串,即使您覆盖了它,它也会在内存中,直到垃圾收集将其删除。这意味着另一个进程可以转储内存(在 GC 运行之前)并可能获取您的密码。另一方面,使用数组,您可以专门覆盖数组,而其他进程将无法获取它。

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

查看了org.apache.http.auth.UsernamePasswordCredentials并且 UsernamePasswordCredentials 仅支持 String。因此,我可能会根据您的安全建议将密码存储为字符数组,然后在调用此类时将其转换为字符串。然后,如果您偏执,请在完成后处理该类并立即运行 GC(这可能会增加您的内存使用量)。

此外,如果安全性如此严重,那么您的管理员应该考虑其他替代方案,例如 disabling core dumps .

关于java - 使用字符数组代替字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58074361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com