【发布时间】:2016-03-30 04:25:52
【问题描述】:
我需要解码 Base64 字符数组而不将其转换为 String。 char 数组是密码,出于安全原因,我不允许将其转换为字符串(此要求不可协商)。
java.util.Base64.Decoder.decode 方法接受 byte[]、ByteBuffer 和 String,但不接受 char[]。
使用字符串存储敏感数据的安全问题
根据 Jim Archer 的评论
- 字符串是不可变的
- 它们只能由垃圾收集器从内存中清除(不能强制这样做)
【问题讨论】:
-
您可以使用this answer 将您的
char[]转换为没有中间String的byte[],然后调用decode(byte[])。 -
为什么使用字节数组的解码方式不合适?
-
顺便说一句,如果您(或任何阅读者)不知道,安全问题源于以下事实:(1)字符串是不可变的,(2)它们等待 GC 回收它们,并且您不能强制 GC 执行此操作。另一方面,StringBuffer 解决了这个问题,因为您可以在完成后销毁内容。
-
@JimArcher 你如何销毁
StringBuffer的内容?CharBuffer也可以做同样的事情吗?CharBuffer有一个clear()方法,但不能保证删除内容。我的部分问题在这里得到了回答:stackoverflow.com/questions/5513144/converting-char-to-byte/… -
@Roland 以下是我想到的两种方法:sb.delete(0, sb.length());和 sb.setLength(0); setLength 方法会将内容设置为 \u0000。
标签: java security char base64 decode