使用Java安全地解码Base64字符数组

Gro*_*ppe 4 java security base64 decode char

我需要解码Base64 char数组而不将其转换为String.char数组是密码,出于安全原因,我不允许将其转换为String(此要求是不可协商的).

java.util.Base64.Decoder.decode方法接受byte[],ByteBufferString,但不是char[].

使用String存储敏感数据的安全问题

根据Jim Archer的评论

  • 字符串是不可变的
  • 它们只能由垃圾收集器从内存中清除(不能强制执行)

Ada*_*dam 5

创建一个由.支持的CharBufferchar[].然后使用Charset.encode将字节缓冲区编码为ByteBuffer.Base64解码器接受ByteBuffer .

private static final java.util.Base64.Decoder BASE_64_DECODER= new java.util.Base64.Decoder();

private static final String ENCODING = "UTF-8";// Use the correct encoding here.

private byte[] decodePassword(char[] password) {
    CharBuffer charBuffer = CharBuffer.wrap(password);
    ByteBuffer byteBuffer = Charset.forName(ENCODING).encode(charBuffer);
    return BASE_64_DECODER.decode(byteBuffer);
}
Run Code Online (Sandbox Code Playgroud)

灵感来自azurefox的评论和答案:https://stackoverflow.com/a/9670279/1361506