将字符[] 转换为字节[]

2022-08-31 10:44:32

我想在Java中将字符数组转换为字节数组。有哪些方法可以进行此转换?


答案 1

在不创建对象的情况下进行转换:String

import java.nio.CharBuffer;
import java.nio.ByteBuffer;
import java.util.Arrays;

byte[] toBytes(char[] chars) {
  CharBuffer charBuffer = CharBuffer.wrap(chars);
  ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(charBuffer);
  byte[] bytes = Arrays.copyOfRange(byteBuffer.array(),
            byteBuffer.position(), byteBuffer.limit());
  Arrays.fill(byteBuffer.array(), (byte) 0); // clear sensitive data
  return bytes;
}

用法:

char[] chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
byte[] bytes = toBytes(chars);
/* do something with chars/bytes */
Arrays.fill(chars, '\u0000'); // clear sensitive data
Arrays.fill(bytes, (byte) 0); // clear sensitive data

解决方案的灵感来自Swing建议将密码存储在char[]中。(请参阅为什么密码的 char[] 优先于字符串?)

请记住不要将敏感数据写入日志,并确保JVM不会保留对其的任何引用。


上面的代码是正确的,但无效。如果您不需要性能,但想要安全性,则可以使用它。如果安全性也不是目标,那么只需做。如果你看一下JDK中的实现,上面的代码是无效的。此外,您需要复制数组并创建缓冲区。另一种转换方法是内联所有代码隐藏(例如 UTF-8):String.getBytesencodeencode

val xs: Array[Char] = "A ß € 嗨 						

答案 2