Хэш SHA1 на шестнадцатеричной строке - PullRequest
3 голосов
/ 02 декабря 2010

Я пытаюсь хэшировать число, представленное шестнадцатеричной строкой, с библиотекой безопасности Java.Это означает, что если у меня есть строка "AABBCCDD", я хочу хэшировать ее не потому, что это ввод ascii, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68, но в виде четырех байтов - 0xAA, 0xBB0xCC, 0xDD.Мне удалось сделать это с низкими значениями, такими как «112233445566» (поскольку байты подписаны в Java), но не удалось с высокими значениями.

Кто-нибудь знает, как реализовать такую ​​вещь?

Спасибо,Биньямин

Ответы [ 2 ]

6 голосов
/ 02 декабря 2010

Сначала преобразуйте свой шестнадцатеричный код в byte[], используя, например, следующее: Преобразуйте строковое представление шестнадцатеричного дампа в байтовый массив, используя Java?

После использования

byte[] data = hexStringToByteArray(hexData);
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(data, 0, data.length);
byte[] sha1hash = md.digest();
2 голосов
/ 02 декабря 2010

По сути, вам просто нужно найти шестнадцатеричный парсер - их много, с одним примером здесь или кодеком Apache Commons для этого и других преобразований. Хотя Java-байты действительно подписаны, вы получите такой же битовый шаблон, как если бы они были без знака, поэтому они будут иметь такой же путь. Если вы не выполняете свою собственную арифметику / сдвиг битов для значений байтов, вы можете обычно игнорировать тот факт, что байты подписаны в Java.

...