字节到字符串,反之亦然

Ash*_*win 4 java encoding bytearray character-encoding

我需要转换随机生成的salt值并将其存储在数据库中.要将它存储在数据库中,我将其转换为字符串.然后,为了检索原始值,我将其转换回字节.但两个值都不匹配.我试过"UTF-8","UTF-16",BASE64Encoder.

SecureRandom ranGen = new SecureRandom();
byte[] aesKey = new byte[16]; // 16 bytes = 128 bits
ranGen.nextBytes(aesKey);   
System.out.println(aesKey);

String a=new String(aesKey,"UTF-16");
byte[] b=new byte[16];
b=a.getBytes("UTF-16");
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)

上述代码的输出(执行2次):

[B@11563ff
[B@1581593
Run Code Online (Sandbox Code Playgroud)

[B@170888e
[B@11563ff
Run Code Online (Sandbox Code Playgroud)

Sir*_*irs 5

你真的应该使用Base64将二进制数据转换为字符串.有许多免费的实现可用,例如Apache Commons Codec中的实现.

此外,它非常易于使用,例如:

对于编码:

import org.apache.commons.codec.binary.Base64;
...
byte[] abValue = {...}; // Your data to encode
Base64 base64 = new Base64();
String strEncodedData = base64.encodeToString(abValue).trim();
Run Code Online (Sandbox Code Playgroud)

用于解码:

import org.apache.commons.codec.binary.Base64;
...
String strEncodedData = "..."; // Your previously encoded data
Base64 base64 = new Base64();
byte[] abValue = base64.decode(strValue);
Run Code Online (Sandbox Code Playgroud)