Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите в libgcrypt по gcry_cipher_decrypt / 25 сообщений из 26, страница 1 из 2
27.06.2014, 12:28
    #38681713
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
пытаюсь просто проверить как работает шифрование-дешифрование
код ТЕСТОВОЙ функции
Код: 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
27.06.2014, 16:12
    #38682058
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
27.06.2014, 18:07
    #38682206
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
27.06.2014, 18:20
    #38682218
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
27.06.2014, 19:33
    #38682301
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
28.06.2014, 15:45
    #38682609
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
А если серьёзно, хочется криптотойких режимов, вроде 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
30.06.2014, 13:28
    #38683664
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
smald,

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

при дополнении до кратности тоже не работает, попробую шифровать только блоками.
...
Рейтинг: 0 / 0
30.06.2014, 18:55
    #38684092
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
01.07.2014, 07:14
    #38684334
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
smald,

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

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

не то что бы не работает у меня - просто выполняю скрипт - то работает чисто, то мусор после шифрования-дешифрованиях появляется, а откуда он берется что то не пойму.
разбираюсь...
...
Рейтинг: 0 / 0
01.07.2014, 08:21
    #38684354
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
похоже нашел я в чем ошибка, нельзя передавать в gcry_cipher_encrypt/gcry_cipher_decrypt в параметре источника вот такие штуки buff.str().c_str() или buff.c_str(), т.е. ничего кроме чистого char*, после того как создал новый буфер и скопировал из const char* text - шифрование-дешифрование прошло без мусора
...
Рейтинг: 0 / 0
01.07.2014, 12:14
    #38684607
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
01.07.2014, 13:47
    #38684748
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
wolverinнельзя передавать в gcry_cipher_encrypt/gcry_cipher_decrypt в параметре источника вот такие штуки buff.str().c_str() или buff.c_str(), т.е. ничего кроме чистого char*, после того как создал новый буфер и скопировал из const char* text - шифрование-дешифрование прошло без мусора
smaldТак что не стоит просто увлекаться этими string и stringstream, независимо от того, что там в букварях пишут.
Оба утверждения - бред.
Вы посмотрите оба на примеры своего кода.
Там же сплошное нечитаемое полотно, отсуствие какого либо стиля, форматирования, смесь С и С++.
Вот это и есть причина по которой обычно "виноваты" компилятор, библиотеки, стандартные классы, и все кто угодно, кроме самого накосячившего программиста .
...
Рейтинг: 0 / 0
01.07.2014, 14:33
    #38684809
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
01.07.2014, 16:13
    #38684919
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
smaldИ разраб может, думая что буфер скопировался на новое место,
начинать изменять старый буфер. Получится то, что получилось у ТС.
Так причем тут контейнеры коль руки кривые?

Не говоря уже о том что никакой stringstream для временного буфера тут вообще не нужен.
Достаточно выделять память через vector или string.
...
Рейтинг: 0 / 0
02.07.2014, 12:22
    #38685617
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
02.07.2014, 12:26
    #38685622
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
02.07.2014, 17:08
    #38686024
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
02.07.2014, 18:00
    #38686075
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
smaldПопробуй.
не, с этим все впорядке, в функции открывается - закрывается все нормально.
я взял шифровано-дешифрованный вариант с мусором, подал на вход функции и получил сколько не повторял снова ИДЕНТИЧНЫЙ мусор (например, в конце строки не до конца дешифрованной), потом сменил несколько раз сальт-кей пока не получил выход без мусора.
может все таки какой то символ не правильно перегоняется в unsigned -> hex ???
...
Рейтинг: 0 / 0
02.07.2014, 18:24
    #38686100
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
02.07.2014, 19:13
    #38686152
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
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
02.07.2014, 19:16
    #38686154
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите в libgcrypt по gcry_cipher_decrypt
wolverin,

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



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

А смысл, прямо в сокет? Что, для оправки каждого байта делать системный вызов,
который будет оборачивать этот байт в пакет, слать его, это как-то не по фен-шую.
Нормально будет реализовать небольшой протокол, по которому, например, передаются
порции данных, где сами данные-структура с служебными полями в начале, указывающие
смещения шифрованных данных и их размер, и сам массив шифра. Шифруемый бефер оформляется
как непрерывный массив с этой структурой в самом начале. По полю размера шифрованных данных,
определяется начало следующей порции шифрованных данных при приёме/передаче. Таким образом
можно организовать последовательную передачу/приём шифрованных данных или
обмен сообщениями. По принципу конечного автомата с контролем/установкой состояния приёма/передачи.
Получится что-то вроде SSL или TLS. Кстати, можно заюзать последние. Там вся процедура шифрования, передачи,
приёма дешифровки-через набор API. Только OpenSSL пропатчить надо будет.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите в libgcrypt по gcry_cipher_decrypt / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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