Уважаемые коллеги, не могу подружить шифрование.
Создаю зашифрованную строку с использованием стандартных функций. AES256 но php при расшифровывании строки с тем же ключом выдаёт странный набор символов.
Перепробовал все варианты, странно ещё то что онлайн дешифровщики то же не понимают шифрование.
Может кто то знает решение вопроса?
Сталкивался точь в точь с такой же проблемой, только с библиотекой шифрования написанной на Си.
К сожалению решение так и не нашёл. Пришлось забыть этот путь.
Есть подозрение, что алгоритмы шифрования в mql, не соответствуют алгоритмам в распространенных библиотеках шифрования.
То есть в алгоритмах mql скорее всего есть ошибки. Зашифрованное на стороне mql, невозможно расшифровать сторонней библиотекой тем же алгоритмом.
P.S.
Если в php есть возможность выбрать CipherMode, то попробуй режим AES ECB no padding.
Но какие режимы я бы не использовал "CBC", "ECB", "CTR", "OFB", "GCM", "CFB"
всё равно не чего не получилось.
Сделал пару тестов. По крайней мере, в онлайн тестере удалось получить такую-же зашифрованную строку, как в MQL.
Method: AES256
Text: The quick brown fox jumps over the lazy dog
Key: ABCDEFGHIJKLMNOPQRSTUVWXYZ123456
Зашифрованная строка: 259109708D50ED4977922302BB27774D948F4A432437378B37A9288BB22BFA3974272765BA8CD35574C47E24DE6871F9
Проверяется тут
- shotgun,WeChatID:TwoFlyingPigs
- the-x.cn
Клиент на Си и сервер на php, это не тема вопроса.
Тема вопроса,
клиент на mql и сервер на php
или
клиент на mql и сервер на Си
У меня не получилось расшифровать c mql на Си.
Имелся в виду простой тест-кейс, типа строка "мама мыла раму", как тут выше приводили, сразу с результатами от mql и не mql.
Наверно это больше актуально для топикстартера на php.
Так как проблема больше его интересует.
Сейчас искать файлы на Си двухгодичной давности и снова вникать в проблему мне не с руки, занят другой задачей.
Просто вспомнилось, что давненько тоже сталкивался с такой же проблемой, поэтому и отписался тут.
Но для тестов и поиска решения проблемы, я сейчас не готов. Реально не до этого.
int OnInit() { string text="The quick brown fox jumps over the lazy dog"; string keystr="d41d8cd98f00b204e9800998ecf8427e"; uchar src[],dst[],key[]; StringToCharArray(keystr,key); StringToCharArray(text,src, 0, ArraySize(src)-1); int res = CryptEncode( CRYPT_AES256, src, key, dst ); if (res > 0) { PrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst)); res = CryptDecode(CRYPT_AES256,dst,key,src); PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src)); } else { Print("Ошибка в CryptDecode. Код ошибки=",GetLastError()); } return(INIT_FAILED); }
<?php /* Encoded data: size=48 C1E4EE445B77DE377EEFA7A8C2A5E30F5190DF813DAB27618E4092A00F9A73039E6234F9B6E6AF34829EAA7DBAD7498F Decoded data: size=48, string='The quick brown fox jumps over the lazy dog' */ $data64 = 'C1E4EE445B77DE377EEFA7A8C2A5E30F5190DF813DAB27618E4092A00F9A73039E6234F9B6E6AF34829EAA7DBAD7498F'; $data = hex2bin($data64); $key = 'd41d8cd98f00b204e9800998ecf8427e'; $s = openssl_decrypt( $data, 'AES-256-ECB', $key, OPENSSL_ZERO_PADDING|OPENSSL_RAW_DATA ); var_dump($s); ?>
Поставьте:
StringToCharArray(keystr, key, 0, StringLen(keystr)); StringToCharArray(text, src, 0, StringLen(text));
Все работает.
2022.11.07 16:52:28.260 cipher (EURUSD,H1) StringToCharArray(keystr,key,0,StringLen(keystr))=32 / ok 2022.11.07 16:52:28.260 cipher (EURUSD,H1) StringToCharArray(text,src,0,StringLen(text))=43 / ok 2022.11.07 16:52:28.260 cipher (EURUSD,H1) CryptEncode(CRYPT_AES256,src,key,dst)=48 / ok 2022.11.07 16:52:28.260 cipher (EURUSD,H1) Encoded data: size=48 2022.11.07 16:52:28.260 cipher (EURUSD,H1) [00] C1 | E4 | EE | 44 | 5B | 77 | DE | 37 | 7E | EF | A7 | A8 | C2 | A5 | E3 | 0F | 2022.11.07 16:52:28.260 cipher (EURUSD,H1) [16] 51 | 90 | DF | 81 | 3D | AB | 27 | 61 | 8E | 40 | 92 | A0 | 0F | 9A | 73 | 03 | 2022.11.07 16:52:28.260 cipher (EURUSD,H1) [32] 9E | 62 | 34 | F9 | B6 | E6 | AF | 34 | 82 | 9E | AA | 7D | BA | D7 | 49 | 8F | 2022.11.07 16:52:28.260 cipher (EURUSD,H1) Decoded data: size=48, string='The quick brown fox jumps over the lazy dog'
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые коллеги, не могу подружить шифрование.
Создаю зашифрованную строку с использованием стандартных функций. AES256 но php при расшифровывании строки с тем же ключом выдаёт странный набор символов.
Перепробовал все варианты, странно ещё то что онлайн дешифровщики то же не понимают шифрование.
Может кто то знает решение вопроса?