加解密时候发现的一个Byte[]问题

起因是这样的,需要做一个加解密的小功能,加密时候传入字符串再返回加密后的字符串,解密时候把加密后的字符串解密返回

public String decrypt(String encValue) {
        byte[] oriValueByte = oriValue.getBytes();
        byte[] encData = 加密后的byte[];
        returnStr = new String(encData);  //加密后的字符串
        System.out.println("加密返回的二进制数组22222 = " + Arrays.toString(encData));
        return returnStr ;
}

然后把加密后的字符串原样传回去解密

 public String decrypt(String encValue) {
        byte[] encValueByte = encValue.getBytes();
        System.out.println("解密传入的参数的二进制数组22222 = " + Arrays.toString(encValueByte));
        byte[] decData = 解密后的byte[]
        returnStr = new String(decData);  //解密后的字符串
        return returnStr ;
}

奇怪的地方在于

img

我以为是getbyte[]的问题,又做了个测试

        String idNumber = "142723199908162111";
        byte[] testByte = idNumber.getBytes();
        System.out.println("idNumber = " + idNumber);
        System.out.println("testByte = " + testByte);
        System.out.println("Arrays.toString = " + Arrays.toString(testByte));

        String kk = new String(testByte);
        System.out.println("kk = " + kk);

        byte[] testByte2 = kk.getBytes();
        System.out.println("testByte2 = " + testByte2);
        System.out.println("Arrays.toString2 = " + Arrays.toString(testByte2));

其实返回值是正确的

img

那么上面的代码问题在哪里呢?为什么同一个字符串返回的二进制数组不同?或者是因为两个字符串看起来一样,其实不一样?

你这个问题是在于加密字符串的时候要指定下编码utf-8 即可解决。
idNumber.getBytes("UTF-8")

你没发现字符串里有好多问号吗
问号就是不能按ascii码转换成字符,只好用问号代替
你把这东西拿去解密,肯定不是原来的字符串了呀
转字符串的时候要注意编码格式,要用base64转字符串

试用了很多办法也不行
后来在加密时候,把加密后的byte[]记下来,在解密时候直接传入这个byte[],而不是转的string,就正确了
难道是byte[]在转了两次之后产生了变化导致的?
真正原因还没找到