Java base64编码,解码产生不同的结果

标签 java string encoding base64 decoding

我正在使用这个: import com.sun.org.apache.xml.internal.security.utils.Base64; 编码/解码 Base64 字符串和字节数组以存储到数据库中。

我正在测试编码和解码以查看是否可以取回原始字符串:

SecureRandom srand = new SecureRandom();
        byte[] randomSalt = new byte[64];
        srand.nextBytes(randomSalt);
        System.out.println("rand salt bytes: " + randomSalt); // first line
        String salt = Base64.encode(randomSalt);
        try {
            System.out.println(Base64.decode(salt)); // second line
        }catch(Base64DecodingException e){
            System.out.println(e);
        }

然而,这会打印出:

rand salt bytes: [B@68286c59
[B@44d01f20

为什么这些不一样,这样我就可以取回原来的字节数组?

最佳答案

你所做的实际上是处理 java 指针而不是实际的字节。 这才是正确的实现方式

byte[]   bytesEncoded = Base64.encodeBase64(str .getBytes());
System.out.println("ecncoded value is " + new String(bytesEncoded ));

// Decode data on other side, by processing encoded data
byte[] valueDecoded= Base64.decodeBase64(bytesEncoded );
System.out.println("Decoded value is " + new String(valueDecoded));

关于Java base64编码,解码产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45249821/

相关文章:

php - 使用 PHP+MySQL 时出现问号而不是希伯来语

java - 一个 21 字节的 UTF-8 序列如何来自 5 个字符?

java - 从遍历文件树中捕获异常

java - 使用 JUnit 作为验收测试框架

java - 通过反射调用的方法的抑制警告

c - 修改用户输入文件路径以扫描C中同一目录中的文件

java - 不使用 Float.MAX_VALUE 查找 float 的最大值?

string - 如何更新字符串中的字符?

java - 如何从后面开始检查字符串是否包含特定字母

swift - 将图像编码为 base64 时的字符串无效 - Swift 4