Генерируйте хеш SHA в C++, пользующемся библиотекой OpenSSL

Попробуйте это:

NSString *str = @"___asdf.SHiv._.l.asg.  g.g._ASdgASG_.......asfgads.g.   .._____fdgdsfghsdfgh";

    str= [str stringByReplacingOccurrencesOfString:@"." withString:@""];
    str=[str stringByReplacingOccurrencesOfString:@"_" withString:@""];
    str=[str stringByReplacingOccurrencesOfString:@" " withString:@""];
    str=[str stringByTrimmingCharactersInSet:[NSCharacterSet alphanumericCharacterSet]];

    if ([str isEqualToString:@""]) {
        NSLog(@"valid");
    }
    else {
        NSLog(@"invalid");
    }
71
задан Uli Köhler 14 March 2015 в 16:51
поделиться

2 ответа

Из командной строки это просто:

printf "compute sha1" | openssl sha1

Вы можете вызвать библиотеку следующим образом:

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main()
{
    unsigned char ibuf[] = "compute sha1";
    unsigned char obuf[20];

    SHA1(ibuf, strlen(ibuf), obuf);

    int i;
    for (i = 0; i < 20; i++) {
        printf("%02x ", obuf[i]);
    }
    printf("\n");

    return 0;
}

76
ответ дан 24 November 2019 в 13:01
поделиться

OpenSSL имеет ужасную документацию без примеров кода, но вот вы:

#include <openssl/sha.h>

bool simpleSHA256(void* input, unsigned long length, unsigned char* md)
{
    SHA256_CTX context;
    if(!SHA256_Init(&context))
        return false;

    if(!SHA256_Update(&context, (unsigned char*)input, length))
        return false;

    if(!SHA256_Final(md, &context))
        return false;

    return true;
}

Использование:

unsigned char md[SHA256_DIGEST_LENGTH]; // 32 bytes
if(!simpleSHA256(<data buffer>, <data length>, md))
{
    // handle error
}

После этого md будет содержать двоичный SHA-256 дайджест сообщений. Аналогичный код можно использовать для других членов семейства SHA, просто замените «256» в коде.

При наличии больших объемов данных, конечно, следует подавать порции данных по мере их поступления (несколько вызовов SHA256 _ Update ).

54
ответ дан 24 November 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: