Я создал C ++ проект, но я работаю с кодом для CUDA в C. Поэтому мне нужен пример преобразования без знака char * в char *. Ниже приведен пример получения ha sh в C ++, но в C code я буду использовать «mallo c» вместо «new»
Описание программы: Ха sh, который необходимо взломать, поступает на вход программы. Я конвертирую его с помощью функции hex_to_sting и сравниваю значение ha sh, вычисленное с помощью функции sha1new
Моя цель - выполнить несколько итераций алгоритма sha1.
Пример:
1 итерации: слово "ZZZZ" = га sh "cb990257247b592eaaed54b84b32d96b7904fd95";
2 итерации: слово "cb990257247b592eaaed54b84b32d96b7904fd95" - га sh «775a2dae52c3ef080726dd427f81bd482fdf96b5 ";
Я хочу преобразовать вывод sha1new в текстовый формат и снова перенести его в алгоритм sha1new
sha1 - немного обновленный код здесь: https://github.com/mochimodev/cuda-hashing-algos/blob/master/sha1.cu
Функция sha1new ():
__device__ __host__ inline void sha1new(uint8* msg, uint8 length, uint8 sha1[20]) {
CUDA_SHA1_CTX ctx;
cuda_sha1_init(&ctx);
cuda_sha1_update(&ctx, msg, length);
cuda_sha1_final(&ctx, sha1);
}
hex_to_string:
void hex_to_string(uint8* msg, size_t msg_sz, char* hex, size_t hex_sz)
{
memset(msg, '\0', msg_sz);
for (int i = 0; i < hex_sz; i += 2)
{
uint8_t msb = (hex[i + 0] <= '9' ? hex[i + 0] - '0' : (hex[i + 0] & 0x5F) - 'A' + 10);
uint8_t lsb = (hex[i + 1] <= '9' ? hex[i + 1] - '0' : (hex[i + 1] & 0x5F) - 'A' + 10);
msg[i / 2] = (msb << 4) | lsb;
}
}
Его работа для одной итерации sha1 (не выводится "не равно") ):
char* testhash = "cb990257247b592eaaed54b84b32d96b7904fd95";
char* word = "zzzz";
unsigned char* sha1hash = new unsigned char[41];
sha1new((unsigned char*)word, 4, sha1hash);
uint8 sha1Unhexed[21];
hex_to_string(sha1Unhexed, 20, testhash, 40);
for (int i = 0; i < 20; i++)
{
if (sha1Unhexed[i] != sha1hash[i])
std::cout << "not equal" << std::endl;
}