Java Apache编解码器base64编码/解码-未获得预期结果
我使用apachecodecbase64库做了一个POC,在这里我使用SHA加密了一个字符串。(这可以忽略) 步骤1-我打印了该字符串的字节数组 步骤2-对字节数组进行编码并打印其值 步骤3-解码编码值并打印Java Apache编解码器base64编码/解码-未获得预期结果,java,apache,encoding,base64,Java,Apache,Encoding,Base64,我使用apachecodecbase64库做了一个POC,在这里我使用SHA加密了一个字符串。(这可以忽略) 步骤1-我打印了该字符串的字节数组 步骤2-对字节数组进行编码并打印其值 步骤3-解码编码值并打印 public static void main(String[] args) { MessageDigest messageDigest = null; String ALGORITHM = "SHA"; try { me
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);
打印字节数组对象的哈希代码。(注意:数组是Java中的对象,不是基元类型)
您应该改用System.out.println(Arrays.toString(byteArray));
,步骤1和步骤3的值相同
根据Arrays.toString(字节[]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();
}
}
输出将是:
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]
注意字节数组的值相同