public static byte[] permutate(byte[] source, int[] positions) {

        byte[] newBlock = new byte[positions.length / 8];
        int byteIndex = -1;

        // voor elke positie
        for (int i = 0; i < positions.length; i++) {
            // neem de index van de bit
            int bitIndex = positions[i] - 1;
            // neem de waarde van de bit (0 of 1)
            byte bit = getBit(source, bitIndex);

            if (i % 8 == 0) {
                byteIndex++;
            }

            // zet de bit in de nieuwe blok op de juiste plaats
            newBlock[byteIndex] = (byte) ((bit << (bitIndex % 8)) | newBlock[byteIndex]);
        }

        return newBlock;
    }