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

时间:2015-12-23 17:16:17

标签: java security char base64 decode

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

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

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

根据Jim Archer的评论

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

1 个答案:

答案 0 :(得分:5)

创建由char[]支持的CharBuffer。然后使用Charset.encode将字节缓冲区编码为ByteBufferBase64 Decoder接受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);
}

受到azurefox的评论和答案的启发:https://stackoverflow.com/a/9670279/1361506