Как изменить размер массива 20 байт до 16 байт в Java - PullRequest
0 голосов
/ 18 октября 2018

У меня есть этот шестнадцатеричный массив из 20 байт, который выводит [Дайджест] SAH-1:

b1d5781111d84f7b3fe45a0852e59758cd7a87e5 

Как я могу использовать его как 16 байт для инициализации IV в алгоритме шифрования AES_CBC, как это:

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 

Класс Utils:

public class Utils
{
    private static String   digits = "0123456789abcdef";

    public static String toHex(byte[] data, int length)
    {
        StringBuffer    buf = new StringBuffer();

        for (int i = 0; i != length; i++)
        {
            int v = data[i] & 0xff;

            buf.append(digits.charAt(v >> 4));
            buf.append(digits.charAt(v & 0xf));
        }

        return buf.toString();
    }

    public static String toHex(byte[] data)
    {
        return toHex(data, data.length);
    }

        public static byte[] toByteArray(
        String string)
    {
        byte[]  bytes = new byte[string.length()];
        char[]  chars = string.toCharArray(); 

        for (int i = 0; i != chars.length; i++)
        {
            bytes[i] = (byte)chars[i];
        }
         return bytes;
    } }

1 Ответ

0 голосов
/ 18 октября 2018

[РЕДАКТИРОВАТЬ: обновил код для использования кода, запрошенного в комментарии]

Использовать Arrays.copyOf(keyBytes, 16):

MessageDigest hash = MessageDigest.getInstance("SHA1"); 
hash.update(Utils.toByteArray(input)); 
byte[] keyBytes = hash.digest();
keyBytes = Arrays.copyOf(keyBytes, 16); // use only first 128 bit
System.out.println("digest : " + Utils.toHex(keyBytes));
...