При преобразовании входящего набора битов в BigInteger теряются начальные байты, если они равны 0 (00000000 в битовом представлении).
Пример:
Вводим два байта (пробел вставлен для удобства восприятия): 00000000 00000001
Ожидаем, что byte [] data будет содержать {0 , 1}
По факту byte [] data содержит {1}, т.к. new BigInteger(noliki, 2) будет равно 1 и при преобразовании toByteArray() вернет {1}