我需要解码Base64 char数组而不将其转换为String。 char数组是一个密码,出于安全考虑,我不允许将其转换为String(此要求是不可协商的)。
java.util.Base64.Decoder。decode方法接受byte[]
,ByteBuffer和String,但不接受char[]
。
使用String存储敏感数据的安全问题
根据Jim Archer的评论
答案 0 :(得分:5)
创建由char[]
支持的CharBuffer。然后使用Charset.encode将字节缓冲区编码为ByteBuffer。 Base64 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