преобразовать массив байтов в строку в java

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

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

Наконец-то я получаю действительный массив строк, преобразовывая шестнадцатеричный код в массив базовых символов. так. 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 = "0123456789abcdef".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);
    }

Спасибо.


person bubu uwu    schedule 22.02.2016    source источник


Ответы (3)


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

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);
     }}
person Community    schedule 22.02.2016

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

new BASE64Encoder().encode(hash)

который вернет вам хешированное сообщение в виде строки.

person Razor    schedule 22.02.2016

просто сделайте новую строку (byteArray);

person Phanindra Gopishetty    schedule 22.02.2016