Я пытаюсь хешировать несколько строк в своем проекте. И я использую следующий проект, который использует алгоритм HAMC SHA1 http://www.codeproject.com/KB/recipes/HMACSHA1class.aspx
Я смог скомпилировать весь код после многих проблем. Но, в конце концов, у меня осталась последняя проблема, связанная с неопределенными ссылками.
Я написал следующий код, чтобы вызвать классы HMAC SHA1, указанные в проекте, который выглядит следующим образом.
BYTE Key[20] ;
BYTE digest[20] ;
unsigned char *test = (unsigned char *)"Hi There" ;
extern "C" {
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz );
}
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
memset(Key, 0x0b, 20) ;
CHMAC_SHA1 HMAC_SHA1 ;
HMAC_SHA1.HMAC_SHA1(test, strlen((const char *)test), Key, sizeof(Key), digest) ;
return env->NewStringUTF("Hello from JNI Sample!");
}
Ошибка обнаружена в следующих строках HMAC_SHA1.cpp, а именно:
CSHA1::Update((UNIT_8 *)key, key_len);
CSHA1::Update((UNIT_8 *)AppendBuf1, sizeof(m_ipad) + text_len);
CSHA1::Update((UNIT_8 *)AppendBuf2, sizeof(m_opad) + SHA1_DIGEST_LENGTH);
Здесь я получаю сообщение об ошибке:
Error: undefined reference to 'CSHA1::Update(unsigned char*, unsigned long)'
Теперь в SHA1.h
я вижу следующий код
////////////////////////////////////////////////// //////////////////////////// // Определяем 8- и 32-битные переменные
#ifndef UINT_32
#ifdef _MSC_VER
#define UINT_8 unsigned __int8
#define UINT_32 unsigned __int32
#else
#define UINT_8 unsigned char
#if (ULONG_MAX == 0xFFFFFFFF)
#define UINT_32 unsigned long
#else
#define UINT_32 unsigned int
#endif
#endif
#endif
///////////////////////////////////// и объявление функции выглядит следующим образом:
// Update the hash value
void Update(UINT_8 *data, UINT_32 len);
Я использую среду Windows, но компилирую в cygwin.
Я не уверен, почему я получаю такую ошибку
Ошибка: неопределенная ссылка на "CSHA1::Update(unsigned char*, unsigned long)"
Может ли кто-нибудь указать, в чем проблема и как ее можно исправить?
Я считаю, что что-то не так с _MSC_VER, потому что оно должно быть ложным, а затем UINT_8 должен определяться беззнаковым символом. Пожалуйста помоги.