我需要解码Base64 char数组而不将其转换为String.char数组是密码,出于安全原因,我不允许将其转换为String(此要求是不可协商的).
该java.util.Base64.Decoder.decode方法接受byte[]
,ByteBuffer和String,但不是char[]
.
使用String存储敏感数据的安全问题
根据Jim Archer的评论
字符串是不可变的
它们只能由垃圾收集器从内存中清除(不能强制执行)
Adam.. 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); }
灵感来自azurefox的评论和答案:https://stackoverflow.com/a/9670279/1361506
创建一个由.支持的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); }
灵感来自azurefox的评论和答案:https://stackoverflow.com/a/9670279/1361506