Добрый день.
В php есть функция
SHA1, ее второй аргумент позволяет "укоротить" конечный хэш.
echo SHA1('Hello World', true).'</br>';
echo SHA1('Hello World');
В первой строке будет хэш в 20 символов, во второй строке в 40.
Как того же добиться на c++ используя openssl? Как перевести 40 шестнадцатеричных символов в 20 двоичных байт?
Сейчас есть такой код:
...
unsigned char obuf[20];
SHA1((const unsigned char *)st, strlen(st), obuf);
char mdString[SHA_DIGEST_LENGTH*2+1];
for(int i = 0; i < SHA_DIGEST_LENGTH; i++)
sprintf(&mdString[i*2], "%02x", (unsigned int)obuf[i]);
...
Где st - это строка, которую необходимо закодировать.