Russian Qt Forum

Программирование => С/C++ => Тема начата: koldun90 от Январь 12, 2021, 16:08



Название: Преобразование char * в uint8_t*
Отправлено: koldun90 от Январь 12, 2021, 16:08
Добрый день собираюсь использовать библиотек шифрования/ расшифрования по ГОСТ
https://github.com/faddistr/GOST28147
Вся проблема в том что данные Я храню в массиве
char mas[] или qbytearray. А функция шифрования/расшифрования GOST_Encrypt_SR требует тип
uint8_ t*.Следовательно как мне грамотно произвести преобразование из char * в uint8_t* ?


Название: Re: Преобразование char * в uint8_t*
Отправлено: qate от Январь 12, 2021, 20:01
я использовал "штатную" реализацию (gost89.h и gost89.c) из состава openssl-1.0.1u.tar.gz, а не эту заброшенную поделку

Код:
#include "gost89.h"
QByteArray gostEncodeCfb(const QByteArray &msg)
{
    static const unsigned char iv[16] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QByteArray data64(msg);
    while (data64.size() % 8) data64.append((char)0);
    QByteArray data64Enc(data64.size(), 0);
    gost_enc_cfb(&ctx, iv, (const unsigned char*)data64.constData(), (unsigned char*)data64Enc.data(), data64.size() / 8);
    return data64Enc;
}


Название: Re: Преобразование char * в uint8_t*
Отправлено: koldun90 от Январь 12, 2021, 21:06
я использовал "штатную" реализацию (gost89.h и gost89.c) из состава openssl-1.0.1u.tar.gz, а не эту заброшенную поделку

Код:
#include "gost89.h"
QByteArray gostEncodeCfb(const QByteArray &msg)
{
    static const unsigned char iv[16] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    QByteArray data64(msg);
    while (data64.size() % 8) data64.append((char)0);
    QByteArray data64Enc(data64.size(), 0);
    gost_enc_cfb(&ctx, iv, (const unsigned char*)data64.constData(), (unsigned char*)data64Enc.data(), data64.size() / 8);
    return data64Enc;
}
Если не сложно можете дать исходник?


Название: Re: Преобразование char * в uint8_t*
Отправлено: qate от Январь 12, 2021, 21:31
https://ftp.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
внутри см. openssl-1.0.1u/engines/ccgost/gost89.*


Название: Re: Преобразование char * в uint8_t*
Отправлено: koldun90 от Январь 13, 2021, 09:11
https://ftp.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
внутри см. openssl-1.0.1u/engines/ccgost/gost89.*

Если не сложно вам приведите пожалуйста пример как шифровать и расшифровать qbytearray в режиме ecb(простой замены), а то просто там не сказано как пользоваться.




Название: Re: Преобразование char * в uint8_t*
Отправлено: qate от Январь 14, 2021, 10:22
Режимом  ECB не рекомендуется пользоваться https://ru.wikipedia.org/wiki/Режим_шифрования


Название: Re: Преобразование char * в uint8_t*
Отправлено: koldun90 от Январь 14, 2021, 20:23
Огромное вам спасибо


Название: Re: Преобразование char * в uint8_t*
Отправлено: Fregloin от Февраль 15, 2021, 13:05
char* encoded_data = some_encode_func(...);

uint8_t* your_uint8_array = reinterpret_cast<uint8_t*>(ecnoded_data);
При условии что sizeof(char) == sizeof(uint8_t) в вашей системе