OriginalGriff
Да ладно тебе - ты хоть что-нибудь умеешь для себя делать? Хорошо, хэши могут быть немного сложными, но это тривиальная задача, которая не должна выходить за рамки среднего новичка после второй недели его курса...
Выделите новый массив байтов: в массиве char есть n символов, тогда длина должна быть (n - 1) / 2 + 1
байты.
Напишите функцию, которая принимает шестнадцатеричный символ и возвращает байт. Это довольно тривиально, самое простое решение (хотя и не самое лучшее) - это базовый switch
:
unsigned char FromHex(char c)
{
switch(c)
{
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
case 'a': return 10;
case 'b': return 11;
case 'c': return 12;
case 'd': return 13;
case 'e': return 14;
case 'f': return 15;
}
// Report a problem here!
...
return -1;
}
Затем выполните цикл через Ваш массив символов в парах.
Используйте функцию FromHex для преобразования каждого символа в двоичный и используйте оператор сдвига влево << для перемещения первого результата в старший байт, а двоичный или iot-в младший байт:
b1 = FromHex(InputData[i++];
b2 = FromHex(INputData[i++};
b = (b1 << 4) | b2;
Затем вставьте этот байт в выходной массив.
30 секунд реального размышления дали бы вам это: так почему же вы спросили нас?
Asish6542165
является ли этот код правильным
#include <stdlib.h>
#включить <stdio.h>
#include <string.h>
#include <unistd.h>
#include <openssl sha.h="">
#include <openssl ripemd.h="">
unsigned char FromHex(char c)
{
переключатель(c)
{
case '0': return 0;
случай "1": возврат 1;
случай "2": возврат 2;
случай "3": возврат 3;
случай "4": возврат 4;
случай "5": возврат 5;
случай "6": возврат 6;
случай "7": возврат 7;
случай '8': возврат 8;
случай "9": возвращение 9;
случай "а": возврат 10;
случай "Б": возвращение 11;
случай "с": возврат 12;
случай "D": возвращение 13;
случай "е": возвращение 14;
случай "F": возврат 15;
}
возврат -1;
}
тап_п(){
unsigned char rawdata [] = "046EAF0968AA895ADDFEE599566F0B880242461D1377F4887C9B84631E13067B96DB18C41E0C208F8D12EBCC3F99F2522903AF6105833E4CBADE9D6A1D0F039187";
int i,a,c=0;
unsigned char output[]="\0";
unsigned int b,b1,b2;
putchar('\п');
putchar('\п');
для(i=0;i<65;i++){
b1 = FromHex(rawdata[c]);
printf("%c",rawdata[c]);
с++;
b2 = FromHex(rawdata[c]);
printf("%c",rawdata[c]);
с++;
b = (b1 << 4) | b2;
выход[a]=b;
ля++;
}
putchar('\п');
putchar('\п');
printf("%s",выход);
putchar('\п');
i=strlen(выход);
printf("%d",i);
unsigned char *d = SHA256(output, 130, 0);
for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
printf("%02x", d[i]);
putchar('\п');
}