2016-02-22 4 views
0

Я пытаюсь преобразовать массив байтов в строку в java с помощью метода new String(bytes, "UTF-8"), но они возвращают объект только. как это @ AB4634bSbbfaпреобразовать массив байтов в строку в java

Итак, я искал способ решить эту проблему.

Наконец, я получаю допустимый массив строк, преобразовывая шестнадцатеричный код в массив базового символа. вот так. char[] chars = {"0", "1", ... "e", "f"};

Этого никогда не было до того, почему мне нужно преобразовать шестнадцатеричный код, чтобы получить допустимую строку.

Это способ. массив байтов, который хэшируется Mac-sha-256 с определенным ключом, когда я хэшировал.

public static String getHashString() { 
     String algorithm = "HmacSHA256"; 

     String hashKey = "some_key"; 
     String message = "abcdefg"; 

     String hexed = ""; 

     try { 
      Mac sha256_HMAC = Mac.getInstance(algorithm); 
      SecretKeySpec secret_key = new SecretKeySpec(hashKey.getBytes(), algorithm); 
      sha256_HMAC.init(secret_key); 

      byte[] hash = sha256_HMAC.doFinal(message.getBytes("UTF-8")); 

      // it doesn't work for me. 
//   hexed = new String(hash, "UTF-8"); 

      // it works. 
      hexed = bytesToHex(hash); 

     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (InvalidKeyException e) { 
      e.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 

     return hexed; 
    } 

    public static final char[] HEX_DIGITS = "abcdef".toCharArray(); 
    public static String bytesToHex(final byte[] data) { 
     final int l = data.length; 
     final char[] hexChars = new char[l<<1]; 
     for(int i=0, j =0; i < l; i++) { 
      hexChars[j++] = HEX_DIGITS[(0xF0 & data[i]) >>> 4]; 
      hexChars[j++] = HEX_DIGITS[0x0F & data[i]]; 
     } 
     return new String(hexChars); 
    } 

Спасибо.

ответ

-2

просто выполните новые строки (byteArray);

0

Я не уверен, что строка, которую вы получаете, в конце концов - это то, за чем вы после. Я думаю, что общий сценарий использовать

new BASE64Encoder().encode(hash)

который будет возвращать вам сообщение хешированной, как String.

4

Ниже приведен пример, который показывает преобразование массива байт в строку: -

public class TestByte 
{  
public static void main(String[] argv) { 

     String example = "This is an example"; 
     byte[] bytes = example.getBytes(); 

     System.out.println("Text : " + example); 
     System.out.println("Text [Byte Format] : " + bytes); 
     System.out.println("Text [Byte Format] : " + bytes.toString()); 

     String s = new String(bytes); 
     System.out.println("Text Decryted : " + s); 
    }}