当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用Java安全地解码Base64字符数组》经验,为你挑选了1个好方法。

我需要解码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



1> Adam..:

创建一个由.支持的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

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有