Apache编解码器base64编码/解码 - 没有得到预期的结果

3

我使用了apache codec base64库进行了一个POC,其中我使用SHA算法加密了一个字符串。(这个可以忽略)

步骤1 - 我打印了该字符串的字节数组。

步骤2 - 对字节数组进行编码并打印其值。

步骤3 - 对编码后的值进行解码并打印它。

public static void main(String[] args)
{
    MessageDigest messageDigest = null;
    String ALGORITHM = "SHA";
    try
    {
        messageDigest = MessageDigest.getInstance(ALGORITHM);
        
        byte[] arr = "admin1!".getBytes();
        byte[] arr2 = messageDigest.digest(arr);
        
        System.out.println(arr2);
        String encoded = Base64.encodeBase64String(arr2);
        
        System.out.println(encoded);
        byte[] decoded = Base64.decodeBase64(encoded);
        
        System.out.println(decoded);
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

期望结果:步骤1和步骤3应该产生相同的输出。 但是我没有得到那个。

输出:

[B @ 5ca801b0

90HMfRqqpfwRJge0anZat98BTdI =

[B @ 68d448a1

1个回答

1

你的程序非常好,只有一个错误。

System.out.println(byteArray); 会打印字节数组对象的哈希码。(注意:在Java中,数组是对象而不是原始类型)

相反,你应该使用 System.out.println(Arrays.toString(byteArray));,这样你将得到步骤1和步骤3的相同值。

根据javadocsArrays.toString(byte[] a) 返回指定数组内容的字符串表示形式。

更改后的代码如下:

public static void main(String[] args)
{
MessageDigest messageDigest = null;
String ALGORITHM = "SHA";
try
    {
    messageDigest = MessageDigest.getInstance(ALGORITHM);
    
    byte[] arr = "admin1!".getBytes();
    byte[] arr2 = messageDigest.digest(arr);
    
    System.out.println(Arrays.toString(arr2));
    String encoded = Base64.encodeBase64String(arr2);
    
    System.out.println(encoded);
    byte[] decoded = Base64.decodeBase64(encoded);
    
    System.out.println(Arrays.toString(decoded));
    }
    catch (NoSuchAlgorithmException e)
    {
    e.printStackTrace();
    }
}

输出结果如下:

输出将会是:

[-9, 65, -52, 125, 26, -86, -91, -4, 17, 38, 7, -76, 106, 118, 90, -73, -33, 1, 77, -46]

90HMfRqqpfwRJge0anZat98BTdI=

[-9, 65, -52, 125, 26, -86, -91, -4, 17, 38, 7, -76, 106, 118, 90, -73, -33, 1, 77, -46]

注意 字节数组的值是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接