 |
HMAC MD5 Реализация на Си - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
07.07.2016, 23:03
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 03.07.2016
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
HMAC MD5 Реализация на Си
Нужна помощь с шифрованием строки HMAC. Проблема в том, что я получаю отличные друг от друга хэши, с одинаковыми входными данными, то есть строки для шифровки и ключа. "Свою" реализацию делаю на C, код не мой конечно, но в поиске примеров попадается очень часто. Сверяю его с хэшем полученным на C#, тот, что я получаю на C# верный, он мне и нужен, на С он отличается.
Cи
Код:
unsigned char md5_lwp[MD5_DIGEST_LENGTH];
const char s_key[] = { 0x23, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xbf, 0xb6, 0x62, 0x85, 0x42, 0xed, 0xd5 };
unsigned char k_ipad[65];
unsigned char k_opad[65];
memset ( k_ipad, 0, sizeof ( k_ipad ) );
memset ( k_opad, 0, sizeof ( k_opad ) );
memcpy ( k_ipad, s_key, hash_size );
memcpy ( k_opad, s_key, hash_size );
for ( int i = 0; i < 64; i++ ) {
k_ipad[i] ^= 0x36;
k_opad[i] ^= 0x5c;
}
MD5_CTX md5_ctx;
/* k_ipad */
MD5_Init ( &md5_ctx );
MD5_Update ( &md5_ctx, k_ipad, 64 );
MD5_Update ( &md5_ctx, lwp, strlen ( lwp ) );
MD5_Final ( md5_lwp, &md5_ctx );
/* k_opad */
MD5_Init ( &md5_ctx );
MD5_Update ( &md5_ctx, k_opad, 64 );
MD5_Update ( &md5_ctx, md5_lwp, hash_size );
MD5_Final ( md5_lwp, &md5_ctx );
C#
Код:
private byte[] GetHash(byte[] key, byte[] data)
{
MD5 md5 = MD5.Create();
return new HMACMD5(md5.ComputeHash(data)).ComputeHash(key);
}
Что я делаю не так ? Опыта работы с openssl мало, не стукайте
|
|
|
08.07.2016, 03:00
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 18.05.2016
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: HMAC MD5 Реализация на Си
Из куска кода не фига не понял((..
Если openssl не обязателен то погугли в сторону wincrypt, в инете много примеров как работать с этой либой и про реализацию на ней HMACMD5 тоже есть.
Последний раз редактировалось DDD03; 08.07.2016 в 03:09.
|
|
|
08.07.2016, 03:09
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 03.07.2016
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: HMAC MD5 Реализация на Си
> Из куска кода не фига не понял((..
А больше и не надо.
> Погугли в сторону wincrypt, в инете много примеров как работать с этой либой и про реализацию на ней HMACMD5 тоже есть.
У меня linux, никакие wincrypt.
|
|
|
08.07.2016, 16:08
|
#4
|
|
|
|
Разведчик
|
 Регистрация: 18.05.2016
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: HMAC MD5 Реализация на Си
> А больше и не надо.
А вот грубить не нада,с openssl я не сталкивался поэтому не понел не чего.
Про linux вы не чего не писали, тут на форуме в основном пишут под С# и паскаль под window, мало кто пишут на С/С++.
|
|
|
08.07.2016, 16:14
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 03.07.2016
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: HMAC MD5 Реализация на Си
> А вот грубить не нада,с openssl я не сталкивался поэтому не понел не чего.
Кто грубил-то ? Никто не грубил, реализация hmacmd5 вся что есть, ну за исключением разве что переменных, но на понимание это никак не влияет.
> Про linux вы не чего не писали, тут на форуме в основном пишут под С# и паскаль под window, мало кто пишут на С/С++.
Очень жаль.
|
|
|
08.07.2016, 16:18
|
#6
|
|
|
|
Разведчик
|
 Регистрация: 18.05.2016
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: HMAC MD5 Реализация на Си
Прошу прощения если не правильно расталкавал фразу, тяжелый день на работе...(
|
|
|
08.07.2016, 16:48
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 03.07.2016
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: HMAC MD5 Реализация на Си
Всё, решил проблему. Достаточно было понять как работает этот код.
Код:
private byte[] GetHash(byte[] key, byte[] data)
{
MD5 md5 = MD5.Create();
return new HMACMD5(md5.ComputeHash(data)).ComputeHash(key);
}
Или более наглядно.
Код:
private byte[] GetHash(byte[] key, byte[] data)
{
MD5 md5 = MD5.Create();
HMACMD5 hmac = new HMACMD5(md5.ComputeHash(data));
return hmac.ComputeHash(key);
}
И всё станет понятно. Тему можно закрывать.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 02:12.
|
 |