java - Java 中的密码安全 - 将 char[] 转换为 String

标签 java security passwords

我正在尝试为网站构建一个非官方 API。它将要求用户登录,然后使用标准的 Console.readPassword() 方法从控制台读取密码。现在,这给了我一个字符数组,但我必须使用 Apache 的 HttpClient 库中的 HttpPost 类通过 POST 请求发送密码。为此,需要一个字符串,但将密码转换为字符串会产生安全风险。 我能做什么?

编辑:我知道如何将字符数组转换为字符串。问题在于字符串是不可变的,并且由于您不能在 Java 中显式删除对象,因此密码将留在内存中。

最佳答案

保安人员为您讲述精彩secure string语言中的概念,以防止堆检查。

我以前是相信这一点的,现在不是了。值得注意的是,.Net 等价物 SecureString 正在逐步淘汰——您只需要观看大约 10 分钟的 this。精彩的 youtube 视频,看看为什么。这个概念听起来很棒,直到您必须实际对数据做一些事情,然后很可能您无法再保证它的安全(就像您的情况一样——您需要使用 Apache 库)。此外,在许多平台上,加密字符串的 key 与字符串本身位于同一内存空间中,因此它确实比安全性更容易混淆。另见 Security Stack Exchange discussion .

底线:这是语言中固有的问题,您无能为力。

关于java - Java 中的密码安全 - 将 char[] 转换为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43174598/

相关文章:

node.js - 使用 Stripe API 出现不安全网站错误

java - 如何使用java在具有相同密码的目录中解压缩多个受密码保护的zip文件?

java - zuul代理总是给出401未经授权

java - 将签名的小程序集成到 Java Web 应用程序中

java - 使用 Tasklet 在 Spring Batch 中或在 CompositeItemWriter 中创建逻辑?

c++ - 在 C++ 中隐藏敏感字符串的技术

python - Django 忘记密码功能更改默认电子邮件

passwords - 传输前对密码进行哈希处理? (网络)

java - 解决 JavaCC token 歧义

java - Hibernate:session.merge执行插入而不是更新?