4029 Error CryptEncode

 

Коллеги, получаю ошибку 4029. Не пойму, в  чем проблема.

  string rowString = "false";
  string keyOrig = "4u7x!A%D";
    
  uchar result[], charKey[], charString[];
  
  StringToCharArray(rowString,charString);
  StringToCharArray(keyOrig,charKey);
  
  //StringToCharArray(rowString,charString,0,StringLen(rowString));
  //StringToCharArray(keyOrig,charKey,0,StringLen(keyOrig));
  
  ResetLastError();
  CryptEncode(CRYPT_AES128,charString,charKey,result);
  Print(GetLastError());
  
  string sum;
  for(int i = 0; i < ArraySize(result); i++)
    {
      sum += CharToString(result[i]);
    }
  
  Print(sum);

Код, который закомментирован - пробовал и так. Т.е. обрезал строку в конце, так как там в конце есть лишний символ.

Но ни так, ни так не работает, постоянно получаю 4029. Подскажите, пожалуйста.

 
Nikita Chernyshov:

Коллеги, получаю ошибку 4029. Не пойму, в  чем проблема.

Код, который закомментирован - пробовал и так. Т.е. обрезал строку в конце, так как там в конце есть лишний символ.

Но ни так, ни так не работает, постоянно получаю 4029. Подскажите, пожалуйста.

Forum on trading, automated trading systems and testing trading strategies

Error CryptDecode

franzk, 2014.07.30 07:23

Sorry gjol ... your solution is also working for CRYPT_AES128+. I just forgot to adapt the key. Need to use a 32 long keystring.

Thanks again foir your help! 


   string rowString = "false";
   string keyOrig = "4u7x!A%D4u7x!A%D4u7x!A%D4u7x!A%D";

   uchar result[], charKey[], charString[];

//  StringToCharArray(rowString,charString);
//  StringToCharArray(keyOrig,charKey);

//StringToCharArray(rowString,charString,0,StringLen(rowString));
//StringToCharArray(keyOrig,charKey,0,StringLen(keyOrig));

   Print("StringLen 1: "+StringToCharArray(rowString,charString,0,StringLen(rowString),CP_ACP));
   Print("StringLen 2: "+StringToCharArray(keyOrig,charKey,0,StringLen(keyOrig),CP_ACP));
   ArrayPrint(charString);
   ArrayPrint(charKey);

   ResetLastError();
   CryptEncode(CRYPT_AES128,charString,charKey,result);
   Print("GetLastError(): "+GetLastError());

   string sum;
   for(int i = 0; i < ArraySize(result); i++)
     {
      sum += CharToString(result[i]);
     }

   Print("sum: "+sum);
StringLen 1: 5
StringLen 2: 32
102  97 108 115 101
 52 117  55 120  33  65  37  68  52 117  55 120  33  65  37  68  52 117  55 120  33  65  37  68  52 117  55 120  33  65  37  68
GetLastError(): 0
sum: ҐС STZ©ТGmv§(j¬A


Минимальная длина ключа 16 символов,

 
Lilita Bogachkova #:


Минимальная длина ключа 16 символов,

Понял, спасибо!

 

https://www.mql5.com/ru/code/16378

Вот в этой библиотеке хорошее решение. Посмотрите.


AES-256 - 32 символьный ключ.

Bcrypt
Bcrypt
  • www.mql5.com
Класс для работы с алгоритмом блочного шифрования.
 
Alexandr Gavrilin #:

https://www.mql5.com/ru/code/16378

Вот в этой библиотеке хорошее решение. Посмотрите.


AES-256 - 32 символьный ключ.

спасибо, просто не хотел библиотеку таскать)

 
Nikita Chernyshov #:

спасибо, просто не хотел библиотеку таскать)

все программисты используют библиотеки свои или сторонние, это удобно и ускоряет процесс разработки. 

любой язык высокоуровневый возьмите, там везде и сплошь библиотеки.