BASE64Decoder类返回的不同长度的字节数组

时间:2014-06-25 16:07:58

标签: java security base64 aes

我正在尝试对我的字符串键执行base64解码,但每次返回不同长度的字节数组。它是有效的,还是可以返回固定字节长度为32?

private byte[] base64DecodeOfKey(String keyval)
            throws JingEncryptionException {
    try {
        return new sun.misc.BASE64Decoder().decodeBuffer(keyval);
    } catch (IOException e) {
        throw new JingEncryptionException(e.getMessage());
    }
}

测试用例:

    byte[] decodeBufferrrrrrr;
    decodeBufferrrrrrr = new Base64().decode("=======================");
    System.out.println("decode:::::::"+decodeBufferrrrrrr);
    String encdata = new Base64().encodeAsString(decodeBufferrrrrrr);
    System.out.println("Encode:::"+encdata);

输出:

decode:::::::[B@535b58
Encode:::

2 个答案:

答案 0 :(得分:0)

Base 64解码是确定性的:相同的输入应始终产生相同的输出。因此对于base 64,相同的base 64字符串应始终返回相同的字节数组。

问题可能在于输入,而不在于功能。请注意,您永远不应使用sun内部类 - API和实现可能随时更改。使用Guava,Apache Commons Codec或内部Bouncy Castle编解码器。

答案 1 :(得分:-1)

得到问题的解决方案,最好的方法是将其转换为UTF-8,二进制格式。作为" *","?"的ASCII表示。等等是未知的。