Java 从字节数组中删除NUL字符

Java 从字节数组中删除NUL字符,java,byte,salt,replaceall,secure-random,Java,Byte,Salt,Replaceall,Secure Random,在我的代码示例中,我生成了一个随机字节数组,必须将其用作密码字段的salt 当我的字节数组中有NUL字符时,就会出现问题。 我找到了一种使用字符串删除此字符的方法,但出于安全原因,我希望使用数组而不是字符串删除此值 下面是我的解决方案。在本例中,我删除了NUL事件,但替换它们可能是一个不错的选择。我怎样才能更换它? 谢谢 字节数组不包含字符,它们包含字节。您可能希望将字节编码为base64之类的字符。无论如何,为什么要删除零字节?如果您试图将字节视为字符,为什么只有零而没有任何不可打印的字符?为

在我的代码示例中,我生成了一个随机字节数组,必须将其用作密码字段的salt

当我的字节数组中有NUL字符时,就会出现问题。 我找到了一种使用字符串删除此字符的方法,但出于安全原因,我希望使用数组而不是字符串删除此值

下面是我的解决方案。在本例中,我删除了NUL事件,但替换它们可能是一个不错的选择。我怎样才能更换它? 谢谢


字节数组不包含字符,它们包含字节。您可能希望将字节编码为base64之类的字符。无论如何,为什么要删除零字节?如果您试图将字节视为字符,为什么只有零而没有任何不可打印的字符?为什么不循环数组的索引,并使用
RANDOM.nextInt(1256)设置每个值
?@kaya3我可以试试你的解决方案。这看起来像是一个-最好是问关于在PostgresQL中存储字节数组并遇到nul字节的问题,而不是你的解决方法,因为可能有更好的解决方案。例如,你可能对列使用了错误的数据类型-如果你在存储字节,您应该使用
bytea
,而不是
text
private static byte[] generateSalt() throws UnsupportedEncodingException, NoSuchAlgorithmException{
    final Random RANDOM = new SecureRandom();

    byte[] salt = new byte[12];
    RANDOM.nextBytes(salt);  

    String str = new String(salt, StandardCharsets.UTF_8);
    str.replaceAll("\u0000", "");
    salt = str.getBytes("UTF-8");

    return salt;
}