Как мне представить литералы uint8 в Java

Я пытаюсь повторно реализовать некоторый код, который использует libsodium в Java. Исходный код объявляет массив типа uint8:

#define SECRET ((uint8_t[]){ 0xAA, 0xBB, 0xCC ... }) // not the real secret!

и кормит это либодиумом crypto_hash_sha256_update

Моя проблема в реализации этого в Java состоит в том, что у Java нет беззнаковых байтов, поэтому я не могу набрать 0xAA как байт.

Вещи, которые я пробовал:

  • Объявление моего массива как short / int: я думаю, что это ломается из-за заполнения 0
  • Объявление литералов как 0b11110000... формат, это не дает правильных ответов (у меня есть некоторые тестовые данные из оригинальной реализации)
  • Объявление массива char [] и конкатенация литералов: final char[] salt = { 0xAABB, 0xCCDD, ...}`, также не дает правильных ответов

РЕДАКТИРОВАТЬ это моя короткая попытка

    final short[] salt = { 0xAA, 0xBB, ...};


    final Hasher hasher = Hashing.sha256().newHasher();
    hasher.putLong(input);
    for (int i=0; i < salt.length; i++) {
        hasher.putShort(salt[i]);
    }
    return hasher.hash().asBytes();

1 ответ

Решение

Похоже, мой оригинальный код работал

final short[] salt = { 0xAA, 0xBB, ...};


final Hasher hasher = Hashing.sha256().newHasher();
hasher.putLong(input);
for (int i=0; i < salt.length; i++) {
    hasher.putShort(salt[i]);
}
return hasher.hash().asBytes();

Проблема была в том, что я забыл оставить результат перед сравнением

Другие вопросы по тегам