繁体   English   中英

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

[英]Apache codec base64 encode/decode - not getting expected result

我使用apache编解码器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

你的计划一切都很好。 只是一个错误。

System.out.println(byteArray); 打印字节数组对象的hashCode。 注意:数组是Java中的对象而不是基本类型)

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

根据javadocs, Arrays.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]

字节数组的注意值相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM