Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2015, 18:45   #1
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию хэш-функция

Здравствуйте, помогите пожалуйста исправить ошибки:
1) memcmp: идентификатор не найден
2): =: невозможно преобразовать "void *" в "unsigned char *"
3): значение типа "void *" нельзя присвоить сущности типа "unsigned char *"
main:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "gosthash.h"

unsigned char test_text1[32] = 
{  	
  0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 
  0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 
  0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3d, 	
  0x33, 0x32, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 
};
  
unsigned char test_hash1[32] =
{
  0xb1, 0xc4, 0x66, 0xd3, 0x75, 0x19, 0xb8, 0x2e,  
  0x83, 0x19, 0x81, 0x9f, 0xf3, 0x25, 0x95, 0xe0,
  0x47, 0xa2, 0x8c, 0xb6, 0xf8, 0x3e, 0xff, 0x1c, 
  0x69, 0x16, 0xa8, 0x15, 0xa6, 0x37, 0xff, 0xfa
};  

unsigned char test_text2[50] = 
{
  0x53, 0x75, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x20, 
  0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67,
  0x69, 0x6e, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x73,
  0x73, 0x61, 0x67, 0x65, 0x20, 0x68, 0x61, 0x73,	
  0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20,
  0x3d, 0x20, 0x35, 0x30, 0x20, 0x62, 0x79, 0x74,
  0x65, 0x73      
};
  
unsigned char test_hash2[32] =
{
  0x47, 0x1a, 0xba, 0x57, 0xa6, 0x0a, 0x77, 0x0d, 
  0x3a, 0x76, 0x13, 0x06, 0x35, 0xc1, 0xfb, 0xea, 
  0x4e, 0xf1, 0x4d, 0xe5, 0x1f, 0x78, 0xb4, 0xae, 
  0x57, 0xdd, 0x89, 0x3b, 0x62, 0xf5, 0x52, 0x08
};
  
unsigned char test_text3[10] =
{
    0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
    0x61, 0x61
};

unsigned char test_hash3[32] =
{
  0x5c, 0x00, 0xcc, 0xc2, 0x73, 0x4c, 0xdd, 0x33,
  0x32, 0xd3, 0xd4, 0x74, 0x95, 0x76, 0xe3, 0xc1,
  0xa7, 0xdb, 0xaf, 0x0e, 0x7e, 0xa7, 0x4e, 0x9f,
  0xa6, 0x02, 0x41, 0x3c, 0x90, 0xa1, 0x29, 0xfa
};

int main(int argc, char **argv)
{
  int i, j, l;
  clock_t tim;
  GostHashCtx hash;
  unsigned char digest[32], *buf;
  
  gosthash_init();    

  gosthash_reset(&hash);
  gosthash_update(&hash, test_text1, 32);
  gosthash_final(&hash, digest);

  if (memcmp(digest, test_hash1, 32) != 0)
    {
      fprintf(stderr, "Test 1 failed.\n");
      exit(-1);
    }
  
  gosthash_reset(&hash);
  gosthash_update(&hash, test_text2, 50);
  gosthash_final(&hash, digest);

  if (memcmp(digest, test_hash2, 32) != 0)
    {
      fprintf(stderr, "Test 2 failed.\n");
      exit(-1);
    }

  for (i = 0; i < 1000; i++)
    {        
      gosthash_reset(&hash);
      for (j = 0; j < 50; )
	{
	  l = rand() % 51;
	  if (l + j >= 50)
	    l = 50 - j;      
	  gosthash_update(&hash, &test_text2[j], l);
	  j += l;
	}
      if (memcmp(digest, test_hash2, 32) != 0)
	{
	  fprintf(stderr, "Test 3 failed (iteration %d).\n", i);
	  exit(-1);
	}
    }
  
  gosthash_reset(&hash);

  for (i = 0; i != 100000; i++)
  {
      gosthash_update(&hash, test_text3, 10);
  }

  gosthash_final(&hash, digest);

  if (memcmp(digest, test_hash3, 32) != 0)
    {
      fprintf(stderr, "Test 4 failed.\n");
      exit(-1);
    }
  
  printf("Tests passed.\n");

  
  buf = malloc(0x1000);
  for (i = 0; i < 0x1000; i++)
    buf[i] = (unsigned char) i;
  
  j = 0;
  tim = clock();
  gosthash_reset(&hash);
  do 
    {      
      for (i = 0; i < 0x100; i++)
	gosthash_update(&hash, buf, 0x1000);  
      j++;
    }
  while(clock() - tim < 5 * CLOCKS_PER_SEC);
      
  gosthash_final(&hash, digest);
  free(buf);
        
  tim = clock() - tim;  
  printf("Speed = %g MBit / second.\n",
	 0.000001 * ((double) j * 0x800000) /
	 ((double) tim / ((double) CLOCKS_PER_SEC)));
 
  return 0;
}
gosthash:
Код:
#ifndef GOSTHASH_H
#define GOSTHASH_H

#include <stdlib.h>

typedef struct 
{
  unsigned long sum[8];
  unsigned long hash[8];
  unsigned long len[8];
  unsigned char partial[32];
  size_t partial_bytes;  
} GostHashCtx;

void gosthash_init();     

void gosthash_reset(GostHashCtx *ctx);  

void gosthash_update(GostHashCtx *ctx, const unsigned char *buf, size_t len);

void gosthash_final(GostHashCtx *ctx, unsigned char *digest);

#endif /* GOSTHASH_H */
fkty вне форума Ответить с цитированием
Старый 18.12.2015, 19:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
memcmp: идентификатор не найден
Она в Хедере cstring.
Цитата:
=: невозможно преобразовать "void *" в "unsigned char *"
Где?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2015, 19:35   #3
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

Вот здесь
Код:
buf = malloc(0x1000);
fkty вне форума Ответить с цитированием
Старый 18.12.2015, 20:02   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно писать так:
Код:
buf = (unsigned char *)malloc(0x1000);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2015, 20:14   #5
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

теперь возникли такие ошибки:
1): ссылка на неразрешенный внешний символ "void __cdecl gosthash_final(struct GostHashCtx *,unsigned char *)" (?gosthash_final@@YAXPAUGostHashCtx @@PAE@Z) в функции _main
2): ссылка на неразрешенный внешний символ "void __cdecl gosthash_update(struct GostHashCtx *,unsigned char const *,unsigned int)" (?gosthash_update@@YAXPAUGostHashCt x@@PBEI@Z) в функции _main
3): ссылка на неразрешенный внешний символ "void __cdecl gosthash_reset(struct GostHashCtx *)" (?gosthash_reset@@YAXPAUGostHashCtx @@@Z) в функции _main
4): ссылка на неразрешенный внешний символ "void __cdecl gosthash_init(void)" (?gosthash_init@@YAXXZ) в функции _main
5): 4 неразрешенных внешних элементов
fkty вне форума Ответить с цитированием
Старый 18.12.2015, 20:19   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так у вас нет реализации этих функций.

А причем тут этот раздел если вопрос о том как писать код на Си, а не о самом алгоритме хэш-функции?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.12.2015, 20:54   #7
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

вот еще два файла
Возникают такие ошибки:
1): аргумент: преобразование "time_t" в "unsigned int", возможна потеря данных (в gostan srand(time(NULL)); )
2): _main уже определен в gostan.obj
3): обнаружен многократно определенный символ - один или более
Вложения
Тип файла: txt gostan.txt (13.2 Кб, 126 просмотров)
Тип файла: txt gosthash.txt (11.8 Кб, 124 просмотров)
fkty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хэш Функция с параметром "Void" Fonduee Общие вопросы C/C++ 5 13.11.2013 12:06
Хэш - функция СветОК Общие вопросы C/C++ 1 27.05.2012 16:53
хэш-функция N-хэш Temka Общие вопросы Delphi 1 29.11.2010 21:11
реализация шифрования. шифр Цезаря + Хэш-функция BlackThornGreed Помощь студентам 0 07.06.2009 10:21