Это как я должен вычислить двойной SHA256

Итак, у меня есть функция sha256, которая принимает строку и возвращает хэш SHA-256.

var First = sha256('myfirstSHA');

И вывод - шестнадцатеричный:

9b2b95b24dd9149480ebda21aafe3f1a3c0370798ceec3c4d09c6a16adfe01c8

Здесь все хорошо, но если я хочу двойной SHA-256, как мне приступить к его вычислению? Могу ли я просто использовать одну и ту же функцию дважды? как это...

var Second = sha256(sha256('myfirstSHA'));

Каким должно быть значение Second?

У меня такое ощущение, что мне может понадобиться получить значение первого хэша и преобразовать его во что-то, прежде чем возвращать его через функцию sha-256 во второй раз??

Итак, мой вопрос: во что мне его преобразовать, прежде чем снова подавать?

Любые советы приветствуются!

Ответы (2)

Да, вы должны преобразовать свой первый вывод, прежде чем возвращать его обратно: хеш-функция обычно представляет собой функцию, которая принимает массив байтов (произвольного размера) и выдает массив байтов (фиксированного размера) . При первом вызове first = sha256('myfirstSHA')строковый аргумент, скорее всего, неявно преобразуется в массив байтов, в результате чего каждый символ заменяется кодировкой одного байта. Однако получаемая вами строка (которая является строкой, а не массивом байтов) явно представляет собой шестнадцатеричное кодирование 32-байтового массива. Вам нужно преобразовать эту шестнадцатеричную кодировку в 32-байтовый массив . Если у вас есть терминал Linux, как указано в этом посте , очень полезная команда xxd -r -pпреобразует вашу шестнадцатеричную кодировку в фактические байты:

$ echo -n myfirstSHA | sha256sum
9b2b95b24dd9149480ebda21aafe3f1a3c0370798ceec3c4d09c6a16adfe01c8 - 
$ echo -n myfirstSHA | sha256sum | xxd -r -p | sha256sum
96082208e341446bb8ba032486d142cbe73f1a66276b96c18ff815f31293fe0d -

Если вас беспокоит завершающий «-», который появляется в выводе sha256sum, вы можете вырезать его:

$ echo -n myfirstSHA | sha256sum | cut -d' ' -f1
9b2b95b24dd9149480ebda21aafe3f1a3c0370798ceec3c4d09c6a16adfe01c8

а затем продолжайте, как раньше:

$ echo -n myfirstSHA | sha256sum | cut -d' ' -f1 | xxd -r -p | sha256sum
96082208e341446bb8ba032486d142cbe73f1a66276b96c18ff815f31293fe0d  -

Если вы не уверены, что xxd -r -pэто правильно, вы можете сохранить вывод в файле:

$ echo -n myfirstSHA | sha256sum | xxd -r -p > temp

затем используйте hexdump -C tempили действительно xxd tempдля проверки содержимого двоичного файла:

00000000  9b 2b 95 b2 4d d9 14 94  80 eb da 21 aa fe 3f 1a  |.+..M......!..?.|
00000010  3c 03 70 79 8c ee c3 c4  d0 9c 6a 16 ad fe 01 c8  |<.py......j.....|
00000020

Мой ответ из этой темы должен помочь .

Мне очень помог Эндрю Чоу .

Я предполагаю, что вы уже знаете всю эту путаницу с обменом байтов в биткойнах...

Надеюсь, это поможет вам или кому-либо еще.

Ваше здоровье!!!