Как мне представить литералы 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();
Проблема была в том, что я забыл оставить результат перед сравнением