2015-02-05 4 views
0

Для использования библиотеки/подсистемы, которую я использую, мне нужно преобразовать SHA1 (рассчитанный с использованием, например, opensll) в 5 массивов элементов беззнаковых длинных int (32 битных переменных) или создать вышеупомянутый SHA1-5-long-массив на себя.Как преобразовать SHA1 в массив [5] беззнаковых длинных ints?

Причина:

SHA1 (160 bits) = 5 x unsigned long int (32 bits)

Я думаю, что первое решение будет лучше, так вот мой вопрос: как я должен идти вокруг этой задачи? Прочитайте байт/бит за байт/бит, а затем создайте из него unsigned long int и поместите его в массив или есть другое решение?

ответ

2

SHA1 производит 20-байтовое значение хэша. В openssl он возвращает unsigned char*. Я предполагаю, что вы можете использовать union из unsigned char[20] и uint32_t[5] и использовать символы для легкого доступа байт:

union mysha1{ 
    uint32_t shaint[5]; 
    unsigned char shachar[20]; 
}; 

Добавьте к этому кучу операторов (индексирование, например), и вы хорошо идти.

Если вы хотите сохранить его грубым и простым, вы можете сделать memcpy между выходом SHA1 и вашим uint32_t[5].

+0

Спасибо, это сработало для меня :) Может быть, кто-то еще придумает конкурирующее решение. – Patryk

+0

Ну, еще одно решение будет «reinterpret_cast», но я уверен, что он нарушит строгий псевдоним. – dmg

 Смежные вопросы

  • Нет связанных вопросов^_^