powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите в libgcrypt по gcry_cipher_decrypt
26 сообщений из 26, показаны все 2 страниц
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38681713
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пытаюсь просто проверить как работает шифрование-дешифрование
код ТЕСТОВОЙ функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
string Crypt(const char* pass, const char* salt, const char* text)
{
    if (!gcry_check_version(GCRYPT_VERSION))
    {
        syslog(LOG_ERR, "libgcrypt version mismatch\n");
        return "";
    }

    gcry_error_t gcryError;
    gcry_cipher_hd_t hd;

    size_t passLen = strlen(pass);
    size_t saltLen = strlen(salt);
    size_t textLen;
    char* outBuff;


    gcryError = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);

    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_open failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setkey(hd, pass, passLen);
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setkey failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setiv(hd, salt, saltLen);
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setiv failed: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError));
        return "";
    }

    stringstream buff("");

            textLen = strlen(text);
            outBuff = (char*)malloc(textLen);
            gcryError = gcry_cipher_encrypt(hd, outBuff, textLen, text, textLen);
            buff.str(outBuff);
            free(outBuff);

            textLen = buff.str().size();
            outBuff = (char*)malloc(textLen);
            gcryError = gcry_cipher_decrypt(hd, outBuff, textLen, buff.str().c_str(), textLen);

            if (gcryError)
            {
                syslog(LOG_ERR, "gcry_cipher_decrypt failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
                return "";
            }

            buff.str(outBuff);

    gcry_cipher_close(hd);
    free(outBuff);
    return buff.str();
}


посылаю туда
Код: plaintext
1.
string bf = Crypt("1234567890123456", "0987654321654321", "blablabla1234567890");


в ответ галиматья чередующаяся с дешифрованным текстом ((
понимаю что ошибка где то в преобразовании типов, но где понять не могу.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38682058
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin

Зачем std::string и basic_stringstream?
Тут достаточно
Код: plaintext
1.
2.
char* Crypt(const char* pass, const char* salt, const char* text)
int Crypt(const char* pass, const char* salt, const char* text, char* result)



Там у Вас string копируется из stringstream. Зачем данные туда-сюда гонять?
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38682206
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smaldТам у Вас string копируется из stringstream. Зачем данные туда-сюда гонять?
это для примера, stringstream вообще нужен, чтобы перегонять hex<->unsigned char* в цикле без использования буферов.
вообщем то я пробовал и вариант
Код: plaintext
1.
2.
3.
gcryError = gcry_cipher_encrypt(hd, outBuff, textLen, NULL, 0);
gcryError = gcry_cipher_decrypt(hd, outBuff, textLen, NULL, 0);
cout << outBuff;


при этом почему то в outBuff все равно появляются неверный символы вперемешку с правильными.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38682218
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
Код: plaintext
1.
2.
3.
gcryError = gcry_cipher_encrypt(hd, outBuff, textLen, text, textLen);
gcryError = gcry_cipher_decrypt(hd, outBuff, textLen, NULL, 0);
cout << outBuff;



ошибся
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38682301
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinпри этом почему то в outBuff все равно появляются неверный символы вперемешку с правильными.

Зачем всё время копировать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
string Crypt(const char* pass, const char* salt, const char* text)
{
    if (!gcry_check_version(GCRYPT_VERSION))
    {
        syslog(LOG_ERR, "libgcrypt version mismatch\n");
        return "";
    }

    gcry_error_t gcryError;
    gcry_cipher_hd_t hd;

    size_t passLen = strlen(pass);
    size_t saltLen = strlen(salt);
    size_t textLen;
    char* outBuff,  *new_outBuff;


    gcryError = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);

    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_open failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setkey(hd, pass, passLen);
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setkey failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setiv(hd, salt, saltLen);
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setiv failed: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError));
        return "";
    }

    stringstream buff;

            textLen = strlen(text);
            outBuff = (char*)malloc(textLen);
            gcryError = gcry_cipher_encrypt(hd, outBuff, textLen, text, textLen);
             buff.rdbuf()->pubsetbuf(outBuff, textLen);
            textLen = buff.str().size();
           char* new_ outBuff = (char*)malloc(textLen);
            gcryError = gcry_cipher_decrypt(hd, new_outBuff, textLen, outBuff, textLen);

            if (gcryError)
            {
                syslog(LOG_ERR, "gcry_cipher_decrypt failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
                return "";
            }

    gcry_cipher_close(hd);
    free(outBuff);
      buff.rdbuf()->pubsetbuf(new_outBuf, textLen);
    return buff.str();
}
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38682609
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если серьёзно, хочется криптотойких режимов, вроде CBC, то перед декриптом нужно закрыть прошлую сессию, и начать новую.
И ещё, желательно, выровнять шифрумый буфер до кратности размеру блока для алгоритма, 16 байт для AES.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
string Crypt(const char* pass, const char* salt, const char* text)
{
    if (!gcry_check_version(GCRYPT_VERSION))
    {
        syslog(LOG_ERR, "libgcrypt version mismatch\n");
        return "";
    }

    gcry_error_t gcryError;
    gcry_cipher_hd_t hd;

    size_t passLen = strlen(pass);
    size_t saltLen = strlen(salt);
    size_t textLen;
    char* outBuff;


    gcryError = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC,/* GCRY_CIPHER_CBC_CTS*/ 0 ); /* Выравниваем сами */

    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_open failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setkey(hd, pass, passLen);
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setkey failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setiv(hd, salt, saltLen);
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setiv failed: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError));
        return "";
    }

    stringstream buff("");

            textLen = strlen(text);
            outBuff = (char*)malloc(textLen);
            gcryError = gcry_cipher_encrypt(hd, outBuff, textLen, text, textLen);
            buff.str(outBuff);
            free(outBuff);

            textLen = buff.str().size();
            outBuff = (char*)malloc(textLen);

                     gcry_cipher_close (hd);
                      memset(&hd, 0, siezof(hd));
            gcryError =gcry_cipher_open (&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0);
       if (gcryError)
    {
        syslog(LOG_ERR, "A-A mlya: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError));
       free(outBuf);
        return "";
    }
gcryError=gcry_cipher_setkey (hd, key, 16);
  if (gcryError)
    {
        syslog(LOG_ERR, "U-U mlya Nah: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError));
        free(outBuf);
        return "";
    }

            gcryError = gcry_cipher_decrypt(hd, outBuff, textLen, buff.str().c_str(), textLen);

            if (gcryError)
            {
                syslog(LOG_ERR, "Твою медь: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
                 free(outBuf);
                return "";
            }

            buff.str(outBuff);

    gcry_cipher_close(hd);
    free(outBuff);
    return buff.str();
}
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38683664
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smald,

получается флаг GCRY_CIPHER_CBC_CTS не работает!?
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38683779
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,

при дополнении до кратности тоже не работает, попробую шифровать только блоками.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38684092
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
получается флаг GCRY_CIPHER_CBC_CTS не работает!?

Последний раз, когда применял (не помню уже точно) флаг не работал.
Были сообщения по этому поводу в багтрекере проекта. Равнял буфер вручную.
Сейчас набросал-всё работает нормально.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
#include <iostream>
#include <fstream>
#include <gcrypt.h>

using namespace std;

 class crypt{
  public:
 crypt(const char* sck, unsigned int ln, const char* sl, unsigned int szl, 
          int al,  int md, unsigned int fl)
            :key(sck), key_sz(ln), alg(al), mode(md), flag(fl), salt(sl), salt_sz(szl){}

int encryptor(char* dst, char* src, size_t sz){ return proc(dst, src, sz, 0); };
int decryptor(char* dst, char* src, size_t sz){ return proc(dst, src, sz, 1); };
~crypt(){};

private:
gcry_cipher_hd_t hd;
gcry_error_t er;
 int alg;
 int mode;
unsigned int flag;
 size_t key_sz;
 size_t salt_sz;
 const char* key;
 const char* salt;
 void err(const char* p){ cout<<"error "<< p<< endl; };

 int proc(char* dst, char* src, size_t sz, uint8_t md){
  uint8_t res=0;
   do{
 er=gcry_cipher_open( &hd, alg, mode, flag);
 if(er){ err(st1.c_str()); return 1; };
er=gcry_cipher_setkey(hd, key, key_sz);
 if(er){ err(st2.c_str()); res=1; break; };
er=gcry_cipher_setiv(hd, salt, salt_sz);
 if(er) { err(st3.c_str()); res=1; break; };
if(md){
er=gcry_cipher_decrypt (hd, dst, sz, src, sz);
 if(er){ err(st5.c_str()); res=1; break; };
 }else{
 er=gcry_cipher_encrypt (hd, dst, sz, src, sz);
 if(er){ err(st4.c_str()); res=1; break; };
    };
 }while(0);
  gcry_cipher_close(hd);
   memset(&hd,0, sizeof(hd));
 return res;
};
  static const  string st1;
  static const  string st2;
  static const  string st3;
  static const  string st4;
  static const  string st5;
 };

 const string crypt::st1="Open";
 const string crypt::st2="Setkey";
 const string crypt::st3="SetIV";
 const string crypt::st4="Encrypt";
 const string crypt::st5="Decrypt";

int main(int c, char** s){
 fstream fs(s[1]);
  if(!fs.good()) return -1;
  crypt cr(s[2], 16, NULL, 0, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);
fs.seekg(0, fs.end);
size_t sz =fs.tellg();
fs.seekg(0, fs.beg);
unsigned a=0; a=sz%16; a=16-a; a=0; /* a>0 для ручного выравнивания */
char* f=(char*)malloc(sz+a), *ff=(char*)malloc(sz+a);
 if(f==NULL || ff==NULL){ free(f); free(ff); return -1; };
 fs.read(f, sz);
char key[17]; key[16]='\0'; strncpy(key, s[2], 16);

 cr.encryptor(ff, f, sz+a);
 cout<<"======================================\nEnc\n";

int d=0; while(d<sz){ cout<< ff[d++]<<"  "; if(!(d%50)) cout<<"\n"; };
memset(f, 0, sz+a);
cr.decryptor(f, ff, sz+a);

cout<<"\n\n\n\n Dec ==\n"<<f<<"\n Ok";

free(f); free(ff);
};
  



Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[smith@nirvana smith]# yum info libgcrypt
Loaded plugins: langpacks
Installed Packages
Name        : libgcrypt
Arch        : x86_64
Version     : 1.5.3
Release     : 2.fc20
Size        : 578 k
Repo        : installed
From repo   : koji-override-0
Summary     : A general-purpose cryptography library
URL         : http://www.gnupg.org/
License     : LGPLv2+
Description : Libgcrypt is a general purpose crypto library based on the code used
            : in GNU Privacy Guard.  This is a development version.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38684334
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smald,

у меня в дебиане

Пакет: libgcrypt11-dev
Версия: 1.5.0-5+deb7u1

не то что бы не работает у меня - просто выполняю скрипт - то работает чисто, то мусор после шифрования-дешифрованиях появляется, а откуда он берется что то не пойму.
разбираюсь...
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38684354
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже нашел я в чем ошибка, нельзя передавать в gcry_cipher_encrypt/gcry_cipher_decrypt в параметре источника вот такие штуки buff.str().c_str() или buff.c_str(), т.е. ничего кроме чистого char*, после того как создал новый буфер и скопировал из const char* text - шифрование-дешифрование прошло без мусора
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38684607
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinпохоже нашел я в чем ошибка, нельзя передавать в gcry_cipher_encrypt/gcry_cipher_decrypt в параметре источника вот такие штуки buff.str().c_str() или buff.c_str(), т.е. ничего кроме чистого char*, после того как создал новый буфер и скопировал из const char* text - шифрование-дешифрование прошло без мусора

Заглядывал в исходники крупных проектов, написанных на C++ (mysql, LLVM,Unity) первое, что бросается
в тамошнем C++, это очень редкое и осторожное использование std контейнеров и стримов. И чаще всего они там переписаны
по своему. Так что не стоит просто увлекаться этими string и stringstream, независимо от того, что там в букварях пишут.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38684748
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinнельзя передавать в gcry_cipher_encrypt/gcry_cipher_decrypt в параметре источника вот такие штуки buff.str().c_str() или buff.c_str(), т.е. ничего кроме чистого char*, после того как создал новый буфер и скопировал из const char* text - шифрование-дешифрование прошло без мусора
smaldТак что не стоит просто увлекаться этими string и stringstream, независимо от того, что там в букварях пишут.
Оба утверждения - бред.
Вы посмотрите оба на примеры своего кода.
Там же сплошное нечитаемое полотно, отсуствие какого либо стиля, форматирования, смесь С и С++.
Вот это и есть причина по которой обычно "виноваты" компилятор, библиотеки, стандартные классы, и все кто угодно, кроме самого накосячившего программиста .
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38684809
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyОба утверждения - бред.
Вы посмотрите оба на примеры своего кода.
Там же сплошное нечитаемое полотно, отсуствие какого либо стиля, форматирования, смесь С и С++.
Вот это и есть причина по которой обычно "виноваты" компилятор, библиотеки, стандартные классы, и все кто угодно, кроме самого накосячившего программиста .

Если делается вместо make_unique делается malloc, от этого С++ не перестаёт таковым быть.

Что до контейнеров, то, например, stringstream в GNU имплементации устроен так.
stringstream содержит basic_stringbuf, наследованный от basic_streambuf.
basic_stringbuf содержит basic_string. В операции str() производится операции с
basic_string через её методы. Короче
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
 class basic_stringbuf : public basic_streambuf<_CharT, _Traits>
65  {
66  public:
67  // Types:
68  typedef _CharT char_type;
69  typedef _Traits traits_type;
70  // _GLIBCXX_RESOLVE_LIB_DEFECTS
71  // 251. basic_stringbuf missing allocator_type
72  typedef _Alloc allocator_type;
73  typedef typename traits_type::int_type int_type;
74  typedef typename traits_type::pos_type pos_type;
75  typedef typename traits_type::off_type off_type;
76 
77  typedef basic_streambuf<char_type, traits_type> __streambuf_type;
78  typedef basic_string<char_type, _Traits, _Alloc> __string_type;
79  typedef typename __string_type::size_type __size_type;
80 
81  protected:
82  /// Place to stash in || out || in | out settings for current stringbuf.
83  ios_base::openmode _M_mode;
84 
85  // Data Members:
86  __string_type _M_string;

.........................................................................................................................

 __string_type
126  str() const
127  {
128  __string_type __ret;
129  if (this->pptr())
130  {
131  // The current egptr() may not be the actual string end.
132  if (this->pptr() > this->egptr())
133  __ret = __string_type(this->pbase(), this->pptr());
134  else
135  __ret = __string_type(this->pbase(), this->egptr());
136  }
137  else
138  __ret = _M_string;
139  return __ret;
140  }
141 
142  /**
143  * @brief Setting a new buffer.
144  * @param __s The string to use as a new sequence.
145  *
146  * Deallocates any previous stored sequence, then copies @a s to
147  * use as a new one.
148  */
149  void
150  str(const __string_type& __s)
151  {
152  // Cannot use _M_string = __s, since v3 strings are COW.
153  _M_string.assign(__s.data(), __s.size());
154  _M_stringbuf_init(_M_mode);
155  }
156 
157  protected:
158  // Common initialization code goes here.
159  void
160  _M_stringbuf_init(ios_base::openmode __mode)
161  {
162  _M_mode = __mode;
163  __size_type __len = 0;
164  if (_M_mode & (ios_base::ate | ios_base::app))
165  __len = _M_string.size();
166  _M_sync(const_cast<char_type*>(_M_string.data()), 0, __len);
167  }



........................................................................................................................................................................... 
/*Для basic_string по  _M_string.assign(__s.data(), __s.size()); */

 template<typename _CharT, typename _Traits, typename _Alloc>
257  basic_string<_CharT, _Traits, _Alloc>&
258  basic_string<_CharT, _Traits, _Alloc>::
259  assign(const _CharT* __s, size_type __n)
260  {
261  __glibcxx_requires_string_len(__s, __n);
262  _M_check_length(this->size(), __n, "basic_string::assign");
263  if (_M_disjunct(__s) || _M_rep()->_M_is_shared())
264  return _M_replace_safe(size_type(0), this->size(), __s, __n);
265  else
266  {
267  // Work in-place.
268  const size_type __pos = __s - _M_data();
269  if (__pos >= __n)
270  _M_copy(_M_data(), __s, __n);
271  else if (__pos)
272  _M_move(_M_data(), __s, __n);
273  _M_rep()->_M_set_length_and_sharable(__n);
274  return *this;
275  }
276  }
277 



Как видно, assign запилен с приколом, по которому, если источник больше приёмника, приёмник move-ится в источник,
если наоборот, источник копируется в приёмник. И разраб может, думая что буфер скопировался на новое место,
начинать изменять старый буфер. Получится то, что получилось у ТС.

ЗЫ если кого-то учили в ВУЗе писать код в виде цветочной клумбы, что женщинам дарить можно было, то
это не потому, что так правильно, а потому, что так удобней преподу с похмелья его проверять и всё.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38684919
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smaldИ разраб может, думая что буфер скопировался на новое место,
начинать изменять старый буфер. Получится то, что получилось у ТС.
Так причем тут контейнеры коль руки кривые?

Не говоря уже о том что никакой stringstream для временного буфера тут вообще не нужен.
Достаточно выделять память через vector или string.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38685617
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smald,
Anatoly Moskovsky,

да похоже ошибка не в том, что я думал, извиняйте.

вообщем вычистил процедуру (думал заработало)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
#define ENCR 1
#define DECR 0

string Crypt(int encdec, const char* pass, const char* salt, const char* text)
{
    if (!gcry_check_version(GCRYPT_VERSION))
    {
        syslog(LOG_ERR, "libgcrypt version mismatch\n");
        return "";
    }

    gcry_error_t gcryError;
    gcry_cipher_hd_t hd;

    size_t textLen = strlen(text);
    char* outBuff;

    gcryError = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);

    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_open failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setkey(hd, pass, strlen(pass));
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setkey failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setiv(hd, salt, strlen(salt));
    //gcryError = gcry_cipher_setiv(hd, NULL, 0);
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setiv failed: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError));
        return "";
    }

    stringstream buff("");
    switch (encdec)
    {
        case ENCR:
            outBuff = (char*)malloc(textLen);
            strcpy(outBuff, text);
            gcryError = gcry_cipher_encrypt(hd, outBuff, textLen, NULL, 0);

            if (gcryError)
            {
                syslog(LOG_ERR, "gcry_cipher_encrypt failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
                return "";
            }

            for (size_t i = 0; i < textLen; i++)
                buff << uppercase << setfill('0') << setw(2) << hex << (unsigned int)(unsigned char)outBuff[i];
                //buff << setfill('0') << setw(2) << hex << uppercase << (outBuff[i] & 0xFF);
            break;
        case DECR:
            char ch[2];
            for (int i = 0; i < textLen; i += 2)
            {
                sprintf(ch, "%c%c", text[i], text[i+1]);
                buff << (unsigned char)strtoul(ch, NULL, 16);
            }
            textLen = buff.str().size();
            outBuff = (char*)malloc(textLen);
            strcpy(outBuff, buff.str().c_str());
            gcryError = gcry_cipher_decrypt(hd, outBuff, textLen, NULL, 0);

            if (gcryError)
            {
                syslog(LOG_ERR, "gcry_cipher_decrypt failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
                return "";
            }

            buff.str(outBuff);
    }

    free(outBuff);
    gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
    gcry_cipher_close(hd);
    memset(&hd, 0, sizeof(hd));
    return buff.str();
}



использую в виде

Код: plaintext
1.
2.
3.
4.
        string bf = out.str();
        bf = Crypt(ENCR, "1234567890abcdef", "1234567890abcdef", bf.c_str());
        cout << bf << endl;
        bf = Crypt(DECR, "1234567890abcdef", "1234567890abcdef", bf.c_str());



stringstream out - склееная строка получаемая по куче условий и содержит время (т.е. шифруемая строка все время новая)
так вот - при запуске выходит то чистая дешифрация, то с муссором, попробовал менять фразу salt на тот буфер что выходил с мусором и ВДРУГ он выходит чистый сколько раз не запускай!!!
НО!!! как только я начинаю снова шифровать текст уже с другим временем - опять в какой то момент появляются строки с муссором и пропадают, как только время меняется.

ЧТО ПРОИСХОДИТ?????????????????????
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38685622
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,

т.е. фигня какая то приблизительно так происходит
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
wolverin@server:~/utils$ ./WebGet.fcgi
{"date_query": "02.07.2014 14:25:58","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
3A21E9880362C5B36E0547985F932AC6CCD03E0EC937B43CDF897EF5D78DF235EFEF6C26713B9DAC4BFEB34DA6DE4C9628FC3B161BF03C5942A15B22228268DC8D62C362A9B92E9C97A5279C53214D8850E515084EC803F5E32994494A111584836B3CEF168588F44AE33C72E6395370625667A07C11FBDCA6A67EF64DBA3D2C1079CFF8FF3B357093EEBEECBA82312739DAE9AC823B994B215ABD56DE64AF74929A2929327B0F858D328A1BA11C449569BAF97A83E0275D419BB9039788571019E9C554A92747
{"date_query": "02.07.2014 14:25:58","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
wolverin@server:~/utils$ ./WebGet.fcgi
{"date_query": "02.07.2014 14:26:00","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
3A21E9880362C5B36E0547985F932AC68F84052DC07524E6F4364F4AECD4E694F3DADB0548031EC7114314D168AC29C97CD4DC8CD2F538CBEC2FDC2B80E3DF53EAC994B10B4A50AFBA4286B33690EA8594DAF0389712EBF359EE7209A18E21267DEAB9EF08963069EC5881795DF7E2BBEEBAA310A931DEC9EE3562120C82464EA1B41A3153BC2916FB5DD7D1CB2B9869C6027167C083958670E233349FE15EFC513507DAA3AA054DF3FC587886B709DE7E5F545A6F9B3730B9BE8A371A36D050EE1C6026C3EC6C
{"date_query": "02.07.2014 14:26:00","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
wolverin@server:~/utils$ ./WebGet.fcgi
{"date_query": "02.07.2014 14:26:00","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
3A21E9880362C5B36E0547985F932AC68F84052DC07524E6F4364F4AECD4E694F3DADB0548031EC7114314D168AC29C97CD4DC8CD2F538CBEC2FDC2B80E3DF53EAC994B10B4A50AFBA4286B33690EA8594DAF0389712EBF359EE7209A18E21267DEAB9EF08963069EC5881795DF7E2BBEEBAA310A931DEC9EE3562120C82464EA1B41A3153BC2916FB5DD7D1CB2B9869C6027167C083958670E233349FE15EFC513507DAA3AA054DF3FC587886B709DE7E5F545A6F9B3730B9BE8A371A36D050EE1C6026C3EC6C
{"date_query": "02.07.2014 14:26:00","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
wolverin@server:~/utils$ ./WebGet.fcgi
{"date_query": "02.07.2014 14:26:01","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
3A21E9880362C5B36E0547985F932AC68F84052DC07524E6F4364F4AECD4E694638A2A7C1AD7FF7A0C6FD512B4F914D9AC7821705E99F6A49FFCCE65C6AD95A12A94356FD7723FBEA66C761AE540784F9DD3C34C3F1E9D061CFA6DF535B5F84773003248073B949244089468D0E723369D1182F1C3F3B206AFA22A8FDB65294662C08B0C8337E4D00311CC37E41DF256CA46201967AD962E07315271471E27A6E379E53531D1034E12713F74A7A6C492FBA047D5B373D934C2F336F6A0DFC54A55B83E5A5B8885
{"date_query": "02.07.2014 14:26:01","query_string": "321блаблабла123321","l_schet": 32&#9618;4}B&#9618;&#9618;&#9618;b&#9618;&#9618;&#9618;TЕ&#9618;/!"
wolverin@server:~/utils$ ./WebGet.fcgi
{"date_query": "02.07.2014 14:26:01","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
3A21E9880362C5B36E0547985F932AC68F84052DC07524E6F4364F4AECD4E694638A2A7C1AD7FF7A0C6FD512B4F914D9AC7821705E99F6A49FFCCE65C6AD95A12A94356FD7723FBEA66C761AE540784F9DD3C34C3F1E9D061CFA6DF535B5F84773003248073B949244089468D0E723369D1182F1C3F3B206AFA22A8FDB65294662C08B0C8337E4D00311CC37E41DF256CA46201967AD962E07315271471E27A6E379E53531D1034E12713F74A7A6C492FBA047D5B373D934C2F336F6A0DFC54A55B83E5A5B8885
{"date_query": "02.07.2014 14:26:01","query_string": "321блаблабла123321","l_schet": 32&#9618;4}B&#9618;&#9618;&#9618;b&#9618;&#9618;&#9618;TЕ&#9618;/!"
wolverin@server:~/utils$ ./WebGet.fcgi
{"date_query": "02.07.2014 14:26:02","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
3A21E9880362C5B36E0547985F932AC68F84052DC07524E6F4364F4AECD4E694D0CC746D396116826CD80CAB776D8934701CDCBB56207C1ADDDE66BBB01406D2A08EECF6BA1773A18708E6DF0BEDC7EFB3C4393B6DD24FAC76E1614684C11813EF5689EED0B0432A5CA8F31D271918CDD7CA3F5DCFAD3CAB650A2DA0477AC36804ECCD68DF06D7A576F04FDD269219ED1CCFF8B5E4A66785A62790F3969F290BE8BE8FEB8F8D43280DADF115A4FFBC92527FB2367DEC3D82BD412DFAA7B4765871B14AF156FF0D
{"date_query": "02.07.2014 14:26:02","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
wolverin@server:~/utils$ ./WebGet.fcgi
{"date_query": "02.07.2014 14:26:03","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
3A21E9880362C5B36E0547985F932AC68F84052DC07524E6F4364F4AECD4E694A66255E7989691786E77844E064D712E586593618B7ED664990C9060DC62244467F49D7DC98971435EA931BE5FF60527D8CA832DADEA4C148462FDD76523943032E4C5A42BFFCFDFC5FC23BA4BF4ECB799645A7A6C1B7F234DE81E99D30B17251B45DB027E56D382A0A49C419B8FFD7FDB0DDE2749D851820A95B6471D721911AEF78A6F54B9BA76D1E18FB6F030955BA202B07039ACFA03DD7598CAE445C593EAF4D0834BA96E
{"date_query": "02.07.2014 14:26:03","query_string": "321блаблабла123321","l_schet": 321блаблабла123321,"dbeg": "321блаблабла123321","dend": "321блаблабла123321",}
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686024
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinЧТО ПРОИСХОДИТ?????????????????????

После encrypt-а, перед decrypt-ом, закрыть предыдущую сессию и
открыть новую, с тем же ключом и солью. Выше об этом писал.
Код: plaintext
1.
2.
3.
4.
5.
6.
gcry_cipher_close(hd);
   memset(&hd,0, sizeof(hd));

................................................................................

gcry_cipher_open( &hd ..............................

Попробуй.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686075
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smaldПопробуй.
не, с этим все впорядке, в функции открывается - закрывается все нормально.
я взял шифровано-дешифрованный вариант с мусором, подал на вход функции и получил сколько не повторял снова ИДЕНТИЧНЫЙ мусор (например, в конце строки не до конца дешифрованной), потом сменил несколько раз сальт-кей пока не получил выход без мусора.
может все таки какой то символ не правильно перегоняется в unsigned -> hex ???
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686100
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinне, с этим все впорядке, в функции открывается - закрывается все нормально.
я взял шифровано-дешифрованный вариант с мусором, подал на вход функции и получил сколько не повторял снова ИДЕНТИЧНЫЙ мусор (например, в конце строки не до конца дешифрованной), потом сменил несколько раз сальт-кей пока не получил выход без мусора.
может все таки какой то символ не правильно перегоняется в unsigned -> hex ???

Тут unsigned -> hex вообще значения не имеют. Сальт тоже может быть без проблем NULL/0
Приведённый выше мной примерчик, шифрует и дешифрует данные любой природы и количества.
Скриншот:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
[smith@nirvana smith]# ./x x.cpp 2wertewwqq wertbvdd
======================================
Enc
u  <  &#65533;    &#65533;    &#65533;  R  L  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    i  B  &#65533;  <  &#65533;  [  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  G    i  &#65533;  0  \  >  B  &#65533;  T  &#65533;  L  G  Q    ]  &#65533;  i  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  
&#65533;  |  &#65533;  &#65533;  &#65533;  >  &  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;  [  H  &#65533;  &#65533;    &#65533;  y  +  ~  6    &#65533;  &#65533;  &#65533;  &#65533;  Z  Z  &#65533;  &#65533;  _  e  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    g  o  &#65533;  &#65533;  c  L  &#65533;  &#65533;  
N  &#65533;  &#65533;  '  '  &#65533;  &#65533;  &#65533;  D  &#65533;  &#65533;  &#65533;  &#65533;  v  &#65533;    &#65533;  2  &#65533;  
    &#65533;  ;    &#65533;  &#65533;  &#65533;  q  &#65533;  &#65533;  [  &#65533;  &#65533;  
                                           &#65533;  {  &#65533;  &#65533;  &#65533;  &#65533;  X    (  &#65533;  x  ]    F   E  
&#65533;  &#65533;  o  ^  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;   &#65533;  N  &#65533;    f  6  N  &#65533;  &#65533;  :  
  &#65533;  &#65533;    &#65533;  &#65533;  L  &#65533;  4  |  B  &#65533;  ;    &#65533;  B    D   ,  &#65533;  &#65533;  T  &#65533;  b  t  &#65533;  L  &#65533;  &#65533;  
}  C  &#65533;  &#65533;  Q  q  &#65533;  &#65533;  %  &#65533;  {    &#65533;  &#65533;  &#65533;  &#65533;  S  T  ]  &#65533;  n  *  %  &#65533;  &#65533;  &#65533;  3    [    $  &#65533;    &#65533;    c  &#65533;  $  P  &#65533;  Z  &#65533;    &#65533;  &#65533;    #  B  &#65533;  &#65533;  
v  &#65533;  &#65533;  &#65533;   X  &#65533;  &  Q  V  _  b  &#65533;  &#65533;  *    &#65533;  y  ^  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  d    j  &#65533;  &#65533;  
  &#65533;  &#65533;  }  &#65533;  `  /  &#65533;  6  "    &#65533;  f    &#65533;  j  &#65533;  &#65533;  v  
*    C  &#65533;   q  &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  O  &#65533;  &#65533;    &#65533;  1  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  S  ~    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  K  F  H  &#65533;  &#65533;  &#65533;  x  1     k  &#65533;    h  >  &#65533;  
'  n  &#65533;  &#65533;  +  &#65533;  @  X  e  C  &#65533;  &#65533;  '  j  &#65533;  v  &  +  &#65533;  &#65533;  &#65533;  Z    !  &#65533;  w  t  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  s   &#65533;  u  &#65533;  &#65533;     &#65533;  &#65533;  &#65533;    &#65533;  ]  L  v  &#65533;  
&#65533;  c  z  &#65533;  .  w  &#65533;  &#65533;  &#65533;  O  &#65533;  :  &#65533;  &#65533;  w  &#65533;  &#65533;    &#65533;    l  9  &#65533;  &#65533;  =  &#65533;  @  &#65533;  &#65533;  &#65533;  c  &#65533;  2  &#65533;  &#65533;  &#65533;  k  &#65533;  &#65533;  W  <  ~  &#65533;  &#65533;  A  >  [  &#65533;  &#65533;  &#65533;  
j  Q  D  &#65533;  &#65533;  &    &#65533;  R  &#65533;  &#65533;  &#65533;  &#65533;    N    &#65533;  3  v  M  R  5    D  =  $  e  &#65533;  k  -  &#65533;  
               &#65533;  \  &#65533;  &#65533;   j  G  &#65533;  ?  &#65533;  &#65533;  T  &#65533;  >  &#65533;  &#65533;  &#65533;  1  
&#65533;  &#65533;  &#65533;  g  
              [  @  8  &#65533;  G  =  &#65533;  &#65533;  1  &#65533;  +  K  [  M     &#65533;  &#65533;  &#65533;  ~  &#65533;  d  &#65533;    R  &#65533;  &#65533;  8  &#65533;  y      &#65533;  &#65533;  .    &#65533;  &#65533;  &#65533;  
&#65533;  &#65533;  &#65533;  &#65533;  9  &#65533;  &#65533;  A  &#65533;  &#65533;    (  D  K    &#65533;  &#65533;  &#65533;  M   &#65533;  &#65533;  &#65533;  %  &#65533;  J  <     &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  /  	    &#65533;  &#65533;  &#65533;  !  ]    &#65533;  .  
&#65533;  +  .  &#65533;  &#65533;  &#65533;     &#65533;  &#65533;  &#65533;  q  k  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;      &#65533;  &#65533;        *  &#65533;  0  ^  &#65533;  7  =  0    &#65533;  &#65533;  7  &#65533;  L  &#65533;  &#65533;  &#65533;   &#65533;  
&  &#65533;  &#65533;  &#65533;  a  &#65533;  1  &#65533;  &#65533;  r  X  2  &#65533;  &#65533;  c  8    V  &#65533;  '  &#65533;  &#65533;  i  &#65533;  &#65533;  &#65533;   H  &#65533;   &#65533;  &#65533;  *  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    o    &#65533;  z  &#65533;  u  ;  	  K  &#65533;    
~  L  (  I  p  a  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  k  %    -  U  A  N  &#65533;  x  &#65533;  R  &#65533;  Q  &#65533;  X  &#65533;      &#65533;  &#65533;  &#65533;  (  n  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    q  H  [  &#65533;  ~  
&#65533;  &#65533;   !  /  &#65533;  &#65533;  f  o  &#65533;  &#65533;  &#65533;      n  &#65533;  P  	    &#65533;  e    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;      &#65533;  &#65533;  &#65533;  &#65533;  X  i  &#65533;  K      &#65533;    &#65533;    &#65533;     c  &#65533;  &#65533;  
&#65533;  &#65533;  &#65533;  &#65533;  a  &#65533;    i  &#65533;  s  @  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    R  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  4  t  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  K  &#65533;    &#65533;  +  
  &#65533;    h  %  &#65533;  &#65533;  p  4    &#65533;    
&#65533;  &#65533;  &#65533;  
           &#65533;  t  &#65533;  &#65533;  u  &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    *  &#65533;  Q  &#65533;  &#65533;  z    &#65533;  &#65533;  &#65533;  [  &#65533;  &#65533;  U  B  B  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  x  n  b  &#65533;  &#65533;  &#65533;  a  l  
&#65533;  &#65533;  &#65533;  [    =  1     &#65533;  u  &#65533;  E  &#65533;  Q    &#65533;  7       &#65533;  ;  &#65533;  &#65533;  7    &#65533;    &#65533;    &#65533;  &#65533;  2  &#65533;    `  E  U  m  &#65533;   u  &#65533;  &#65533;   &#65533;  &#65533;  S  H  
&#65533;  )  	  3  6    ;  ]  t  j  j    &#65533;  B  V    u  &#65533;  &#65533;  &#65533;  &#65533;    z  E  &#65533;    &#65533;  !  &#65533;  &#65533;    &#65533;  g  &#65533;    &#65533;  &#65533;  &#65533;  h  Z  &#65533;  (  s  &#65533;  &#65533;  &#65533;  &#65533;  	  &#65533;  &#65533;  
U  
    t  c  
             &#65533;  i  V    &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  C  
                                                &#65533;  &#65533;  (  &#65533;  &#65533;  &#65533;  &#65533;  A  &#65533;  &#65533;  &#65533;  &#65533;  w  <  &#65533;  *  &#65533;  &#65533;  &#65533;  Y  &#65533;  	  &#65533;  U  b  &#65533;  %  '    c  $  
                                                               
&#65533;  &#65533;  &#65533;  e  &#65533;  &#65533;  &#65533;    q  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;  H  &#65533;  &#65533;  \  &#65533;  1  &#65533;  \  c  T  &#65533;  &#65533;  B    d  &#65533;  z  &#65533;  9  N  &#65533;  &#65533;  8  >  &#65533;  
                                        &#65533;  J  T  v  &#65533;    &#65533;  
                                                                 
5  s  E  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    "    &#65533;  &#65533;  &#65533;  &#65533;  K  %  &#65533;  +  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;      o  E  9  &#65533;  u  &#65533;  #  &#65533;  &#65533;  &#65533;  .  q  >  &#65533;  &#65533;    &#65533;  5   f  &#65533;  &#65533;  
&#65533;  &#65533;  &#65533;  &#65533;  &#65533;  O     o  &#65533;  &#65533;  &#65533;  &#65533;  o  &#65533;    (  &#65533;  &#65533;  &#65533;     &#65533;  &#65533;  &#65533;  &#65533;  S  <     r  &#65533;  &#65533;  &#65533;  I  <  &#65533;  &#65533;  &#65533;  N  &#65533;  o  Z  4  &#65533;  &#65533;  &#65533;  &#65533;    '  &#65533;  &  &#65533;  
   &#65533;  6  &#65533;  &#65533;  &#65533;    o  s  &#65533;  z  &#65533;  H  E  o  '  w  P  &#65533;  @  r  N    &#65533;  k  v  &#65533;  c  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  n  &#65533;    &#65533;  7  E  &#65533;    &#65533;  z  &#65533;    &#65533;  &#65533;  &#65533;  
&#65533;  e  &#65533;  &#65533;  #  +  &#65533;  &#65533;  S    u  *  
  3  &#65533;  j  o  "    -  &#65533;  m  &#65533;  &#65533;  N  &#65533;  &#65533;  &#65533;  z  (  &#65533;  &#65533;  &#65533;  &#65533;    d  C  &#65533;  !  &#65533;  &#65533;      I  6  &#65533;    &#65533;  &#65533;  5  
&#65533;  &#65533;  &#65533;  &#65533;  &#65533;  x  &#65533;  &#65533;  &#65533;  &#65533;  #  r  g  I  k  
                                               &#65533;  q  &#65533;  &#65533;  &#65533;    &#65533;  M  &#65533;  &#65533;  &#65533;  P  O  S  &#65533;  &#65533;  [    &#65533;  &#65533;  &#65533;    &#65533;  L  &#65533;   &#65533;  &#65533;  :  &#65533;  ,  &#65533;    &#65533;  
&#65533;  )  &#65533;  $  &#65533;  Q  &#65533;  ?  &#65533;  &#65533;  t  O  &#65533;  ^  4  &#65533;  &#65533;  &#65533;  i  &#65533;  &#65533;  &#65533;  Q  R  &#65533;  &#65533;  y    (    &#65533;  &#65533;  Y  &#65533;    n  m  &#65533;   &#65533;  &#65533;  >  &#65533;  &#65533;  5  ]  &#65533;  &#65533;  &#65533;  n  
  &#65533;  !  R  a  &#65533;  9  &#65533;  
                         &#65533;    &#65533;  @  &#65533;  #  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  /  
                                                              &#65533;  H  .  q  &#65533;  &#65533;  b  y  u  &#65533;  &#65533;  6  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  r  x  &#65533;  /  l  /  N  &#65533;  p  "  
q  5  &#65533;  &#65533;  B  b  &#65533;  &#65533;   ^  &#65533;    Q  #  &#65533;  z  &#65533;  &#65533;  m  &#65533;  $  &#65533;    &#65533;  &#65533;  &#65533;  x  b  &#65533;  &#65533;  &#65533;  F  &#65533;  &#65533;  &#65533;    ?  `  &#65533;  &#65533;  ]  1  &#65533;  &#65533;  &#65533;    >  q  7  &#65533;  
2    &#65533;  $  &#65533;  &#65533;  &#65533;  &#65533;  n  &#65533;   &#65533;  y  &#65533;  R  b  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    k  &#65533;  N    h  &#65533;  &#65533;  &#65533;  8  m  &#65533;  !    g  \  &#65533;  ,  &#65533;  z  &#65533;  &#65533;  H  =  &#65533;    &#65533;      
k    &#65533;  
              &#65533;  &#65533;  -  5  +  &#65533;  E  g  "  J  P  {  j  .  +  3  &#65533;        4  &#65533;  1  U  k  C  ]  &#65533;  y  g  1    l  E  &#65533;  &#65533;  _  &#65533;  &#65533;  L  &#65533;  &#65533;  n  &#65533;  
&#65533;  &#65533;  F  :  &#65533;  v  )  ^  &#65533;  ?  g  G  7  &#65533;  &#65533;  2  &#65533;  	  J  &#65533;  \  d  &#65533;  x  &#65533;  z  g  1  &#65533;  &#65533;   F  k  <  &#65533;  &#65533;  &#65533;  F  K  &#65533;  /  &#65533;  &#65533;  !  &#65533;  ~  Y  5    E  
]  ;  C    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  	  #  &#65533;     &#65533;   &#65533;  &#65533;  N  b  &#65533;  &#65533;  j       k  Z  &#65533;  &#65533;  &#65533;  x  &#65533;  &#65533;  &#65533;  m  &#65533;  U  5  &#65533;  &#65533;    =  &#65533;  F  7  
  >  &#65533;     &#65533;  ?  V  &#65533;  &#65533;  &#65533;  v  (  &#65533;  :  {  E    &#65533;  &#65533;  &#65533;  e  *  &#65533;  &#65533;    $  &#65533;   L  T    5  &#65533;  >  C  W  &#65533;  &#65533;  ]  &#65533;  &#65533;    L  &#65533;  U  &#65533;  F  &#65533;  
&#65533;    ^  &#65533;  &#65533;  o  C  ,  &#65533;  <  ?  D  &#65533;      <  J  X  &#65533;  &#65533;  &#65533;  &#65533;  ^  &#65533;  E  v  L  O  a  &#65533;  &#65533;  b  &#65533;  &#65533;  &#65533;  &#65533;  p  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  *  9  M  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  
&#65533;  &#65533;  k  &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  |  &#65533;  &#65533;  &#65533;  &#65533;  6  &#65533;  &#65533;  c  &#65533;  &#65533;  &#65533;  Q  O  &#65533;  ~  &#65533;  &#65533;  &#65533;  w    c   &#65533;  q  &#65533;   &#65533;  L    -    &#65533;  &#65533;  y  u  &#65533;  &#65533;  5  
&#65533;  >    G  &#65533;  ?  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  `  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  P  j  R     H  u  &#65533;  &#65533;  "  &#65533;  &#65533;  *  &#65533;      M  &#65533;    &#65533;  '  &#65533;  &#65533;  K  Q  &#65533;    $  &#65533;  
f  &#65533;    &#65533;  &#65533;  8  &#65533;  &#65533;  &  &#65533;    p  P    l  f  7  &  K  &#65533;  &#65533;    {  k  D  &#65533;  &#65533;  &#65533;  c    &#65533;  &#65533;  &#65533;  J  O  ^  &#65533;  j  &#65533;  v  v  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  4  A  &#65533;  
  	  &#65533;  &#65533;    W  &#65533;  p   &#65533;  x  D  M  &#65533;  K  &#65533;  &#65533;  &#65533;  )    &#65533;  L   &#65533;    :  &#65533;  &#65533;  0  B  n  J  ^  {  w  &#65533;   &#65533;  &#65533;    :  &#65533;  e  1  &#65533;  	  q  &#65533;    &#65533;  
&#65533;  M  &#65533;    &#65533;  &#65533;  Z  \  h  &#65533;  }  &#65533;  &#65533;  &#65533;  k  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  .  $  &#65533;  &#65533;  &#65533;  &#65533;  4  [  &#65533;  ]  [  C  Z  ~  e  &#65533;  &#65533;  d  3    }  &#65533;     
    9  &#65533;  &#65533;  &#65533;  F  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;  .  W  &#65533;  &#65533;  :  &#65533;  &#65533;  &#65533;  K  &#65533;  &#65533;  w  n  &#65533;  c  #  <  6  8    &#65533;  [  ,  M    &#65533;  &#65533;   &#65533;  -  w    ;  &#65533;  &#65533;  &#65533;  &#65533;  
&#65533;  &#65533;  &#65533;  &#65533;  j  &#65533;  &#65533;  3  h  p  ]  &#65533;  H  &#65533;  &#65533;  X  &#65533;  )  &#65533;  3  @  V  &#65533;  &#65533;    &#65533;  &#65533;  &#65533;  p  &#65533;  *    '  &#65533;    &#65533;  &#65533;  &#65533;    W  j  l  v    '  &#65533;  &#65533;  
  &#65533;  &#65533;  
&#65533;  &#65533;  N  &#65533;  &#65533;  p  &#65533;  &#65533;  Z  &#65533;  8  V  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    <  &#65533;  &#65533;  y  &#65533;  &#65533;  &#65533;    &#65533;  9  f  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  m  b  &#65533;  g  &#65533;  &#65533;    o    &#65533;  &#65533;  &#65533;  &#65533;  3  
}  o  &#65533;  &#65533;   &#65533;  &#65533;  +  &#65533;  &#65533;  t  q  &#65533;  +     B  s  &#65533;  m  8  &#65533;  &#65533;  &#65533;  &#65533;  
                                                                         X  &#65533;  {  Q  Y  W  &#65533;  t  0  {  Y  z  a  &#65533;  B  &#65533;  .  U  8  &#65533;  &#65533;  &#65533;  g  {  
  4  &#65533;  -  &#65533;    &#65533;  #  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  X  &#65533;  &#65533;  E  ,  &#65533;  &#65533;  &#65533;  E  &#65533;  $  &#65533;  &#65533;  
&#65533;  &#65533;  D  I  &#65533;  >    S  I  *   &#65533;  &#65533;  L  &#65533;    F  &#65533;  7  e  s  &#65533;  &#65533;  &#65533;  i  f  &#65533;  &#65533;  &#65533;  d  &#65533;  &#65533;    z  ^  !  &#65533;  Z  &#65533;    &#65533;  
`    &#65533;  H  &#65533;  &#65533;  &#65533;  n  w  &#65533;    4  Z    &#65533;  &#65533;  &#65533;  &#65533;  ,     2  &#65533;  &#65533;  %  8  g    &#65533;  &#65533;  $  &#65533;   &#65533;  &#65533;    t  &#65533;  &#65533;  &#65533;  2    H  &#65533;    &#65533;  &#65533;  [  /  &#65533;  
&#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  c  9  &#65533;  &#65533;  &#65533;  a  D  &#65533;  &#65533;  &#65533;  o  &#65533;  &#65533;  _  }  :  d  ]  C  



 Dec ==
#include <iostream>
#include <fstream>
#include <gcrypt.h>

#include <algorithm>
using namespace std;

 class crypt{
  public:
 crypt(const char* sck, unsigned int ln, const char* sl, unsigned int szl, 
          int al, int md, unsigned int fl)
           :key(sck), key_sz(ln), alg(al), mode(md), flag(fl), salt(sl), salt_sz(szl){}

int encryptor(char* dst, char* src, size_t sz){ return proc(dst, src, sz, 0); };
int decryptor(char* dst, char* src, size_t sz){ return proc(dst, src, sz, 1); };
~crypt(){};

private:
gcry_cipher_hd_t hd;
gcry_error_t er;
unsigned int alg;
unsigned int mode;
unsigned int flag;
 size_t key_sz;
 size_t salt_sz;
 const char* key;
 const char* salt;
 void err(const char* p){ cout<<"error "<< p<< endl; };

 int proc(char* dst, char* src, size_t sz, uint8_t md){
  uint8_t res=0;
   do{
 er=gcry_cipher_open( &hd, alg, mode, flag);
 if(er){ err(st1.c_str()); return 1; };
er=gcry_cipher_setkey(hd, key, key_sz);
 if(er){ err(st2.c_str()); res=1; break; };
er=gcry_cipher_setiv(hd, salt, salt_sz);
 if(er) { err(st3.c_str()); res=1; break; };
if(md){
er=gcry_cipher_decrypt (hd, dst, sz, src, sz);
 if(er){ err(st5.c_str()); res=1; break; };
 }else{
 er=gcry_cipher_encrypt (hd, dst, sz, src, sz);
 if(er){ err(st4.c_str()); res=1; break; };
    };
 }while(0);
  gcry_cipher_close(hd);
   memset(&hd,0, sizeof(hd));
 return res;
};
  static const  string st1;
  static const  string st2;
  static const  string st3;
  static const  string st4;
  static const  string st5;
 };

 const string crypt::st1="Open";
 const string crypt::st2="Setkey";
 const string crypt::st3="SetIV";
 const string crypt::st4="Encrypt";
 const string crypt::st5="Decrypt";


int main(int rag, char** s){
 fstream fs(s[1]);
  if(!fs.good()) return -1;
char key[17]; key[16]='\0'; strncpy(key, s[3], 16);
  crypt cr(s[2], 16, (const char*)key, 16, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);
fs.seekg(0, fs.end);
size_t sz =fs.tellg();
fs.seekg(0, fs.beg);
unsigned a=0; a=sz%16; a=16-a; a=0;
char* f=(char*)malloc(sz+a), *ff=(char*)malloc(sz+a);
 if(f==NULL || ff==NULL){ free(f); free(ff); return -1; };
 fs.read(f, sz);


 cr.encryptor(ff, f, sz+a);
 cout<<"======================================\nEnc\n";

int d=0; while(d<sz){ cout<< ff[d++]<<"  "; if(!(d%50)) cout<<"\n"; };
memset(f, 0, sz+a);
cr.decryptor(f, ff, sz+a);

cout<<"\n\n\n\n Dec ==\n"<<f<<"\n Ok";

free(f); free(ff);
};
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686152
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smald,

а это у вас что такое?
Код: powershell
1.
2.
3.
4.
5.
#65533;    &#65533;    &#65533;  R  L  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    i  B  &#65533;  <  &#65533;  [  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  G    i  &#65533;  0  \  >  B  &#65533;  T  &#65533;  L  G  Q    ]  &#65533;  i  &#65533;    &#65533;  &#65533;  &#65533;  &#65533;  
&#65533;  |  &#65533;  &#65533;  &#65533;  >  &  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    &#65533;  [  H  &#65533;  &#65533;    &#65533;  y  +  ~  6    &#65533;  &#65533;  &#65533;  &#65533;  Z  Z  &#65533;  &#65533;  _  e  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;  &#65533;    g  o  &#65533;  &#65533;  c  L  &#65533;  &#65533;  
N  &#65533;  &#65533;  '  '  &#65533;  &#65533;  &#65533;  D  &#65533;  &#65533;  &#65533;  &#65533;  v  &#65533;    &#65533;  2  &#65533;  
    &#65533;  ;    &#65533;  &#65533;  &#65533;  q  &#65533;  &#65533;  [  &#65533;  &#65533;  
                                           &
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686154
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,

у меня тоже шифрует дешифрует если буфер символов сразу перекидывать, мне нужно как то в сокет ответить, а там что то браузер с ума сходит если я ему такое выдаю, поэтому все черех hex думал.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686158
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinwolverin,
а там что то браузер с ума сходит если я ему такое выдаю, поэтому все черех hex думал.
да и запрос GET приходит в скрипт тоже шифрованные, и в символах разве получиться обработать.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686261
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
а это у вас что такое?



Хороший шифр, ни один Нэш не разберёт.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686275
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinу меня тоже шифрует дешифрует если буфер символов сразу перекидывать, мне нужно как то в сокет ответить, а там что то браузер с ума сходит если я ему такое выдаю, поэтому все черех hex думал.

А смысл, прямо в сокет? Что, для оправки каждого байта делать системный вызов,
который будет оборачивать этот байт в пакет, слать его, это как-то не по фен-шую.
Нормально будет реализовать небольшой протокол, по которому, например, передаются
порции данных, где сами данные-структура с служебными полями в начале, указывающие
смещения шифрованных данных и их размер, и сам массив шифра. Шифруемый бефер оформляется
как непрерывный массив с этой структурой в самом начале. По полю размера шифрованных данных,
определяется начало следующей порции шифрованных данных при приёме/передаче. Таким образом
можно организовать последовательную передачу/приём шифрованных данных или
обмен сообщениями. По принципу конечного автомата с контролем/установкой состояния приёма/передачи.
Получится что-то вроде SSL или TLS. Кстати, можно заюзать последние. Там вся процедура шифрования, передачи,
приёма дешифровки-через набор API. Только OpenSSL пропатчить надо будет.
...
Рейтинг: 0 / 0
Подскажите в libgcrypt по gcry_cipher_decrypt
    #38686419
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smald,

все разобрался, так работает, спасибо что не бросили )) тудасюда hex гоняется нормально, там путаница была у меня с размерами и попыткой посчитать длину строки через strlen у шифрованного буфера unsigned char*, который переодически получался РАЗНЫЙ!!! видать strlen нельзя посчитать такие вещи ))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
#define ENCR 1
#define DECR 0

string Crypt(int encdec, const char* pass, const char* salt, const char* text, size_t textLen)
{
    if (!gcry_check_version(GCRYPT_VERSION))
    {
        syslog(LOG_ERR, "libgcrypt version mismatch\n");
        return "";
    }

    gcry_error_t gcryError;
    gcry_cipher_hd_t hd;
    char* outBuff;

    gcryError = gcry_cipher_open(&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS);

    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_open failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setkey(hd, pass, strlen(pass));
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setkey failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
        return "";
    }

    gcryError = gcry_cipher_setiv(hd, salt, strlen(salt));
    if (gcryError)
    {
        syslog(LOG_ERR, "gcry_cipher_setiv failed: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError));
        return "";
    }

    stringstream buff("");
    switch(encdec)
    {
        case ENCR:
            outBuff = (char*)malloc(textLen);
            gcryError = gcry_cipher_encrypt(hd, outBuff, textLen, text, textLen);

            if (gcryError)
            {
                syslog(LOG_ERR, "gcry_cipher_encrypt failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
                return "";
            }

            for (size_t i = 0; i < textLen; i++)
                buff << setfill('0') << setw(2) << hex << (unsigned int)(unsigned char)outBuff[i];

            break;
        case DECR:
            char ch[2];
            for (int i = 0; i < textLen; i += 2)
            {
                sprintf(ch, "%c%c", text[i], text[i+1]);
                buff << (unsigned char)strtoul(ch, NULL, 16);
            }

            textLen /= 2;
            outBuff = (char*)malloc(textLen + 1);
            outBuff[textLen] = 0;
            gcryError = gcry_cipher_decrypt(hd, outBuff, textLen, buff.str().c_str(), textLen);

            if (gcryError)
            {
                syslog(LOG_ERR, "gcry_cipher_decrypt failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError));
                return "";
            }

            buff.str(outBuff);
    }

    free(outBuff);
    gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
    gcry_cipher_close(hd);
    //memset(&hd, 0, sizeof(hd));
    return buff.str();
}
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите в libgcrypt по gcry_cipher_decrypt
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]