api_main

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
api_main [2021/10/19 08:23]
phaust [Расшифровка] +rstrip
— (текущий)
Строка 1: Строка 1:
-====== Зашифрованная информация об игре ====== 
  
-===== Зачем?​===== 
- 
-Если необходимо передать некую информацию об игре во время игры сторонним сервисам (телеграм ботам, сторонним скриптам и т.п.) - то рекомендуется пользоваться генерацией зашифрованной строки. В этом случае даже технически подкованные игроки не смогут увидеть,​ какая именно информация передаётся,​ и подменить её самостоятельно (особенно актуально на Лонг форматах). 
- 
-===== Как?​===== 
- 
-==== Генерация ключа ==== 
- 
-В игре надо создать ключ. Для этого в редакторе игры в разделе 'API для внешних сайтов/​телеграм ботов'​ ткнуть кнопку '​Сгенерировать'​. 
- 
-==== Использование в задании ==== 
- 
-В заданиях и описании игры можно использовать конструкцию !api:​**данные**! 
- 
-**данные** - нужные стороннему серверу - указываются через запятую:​ 
- 
-  * user_id - id юзера. В данных поле '​u'​. 
-  * user_name - Логин юзера. В данных поле '​un'​ 
-  * team_id - Id команды. В данных поле '​tm'​ 
-  * team_name - Названия команды. В данных поле '​tmn'​ 
-  * task_n - Номер уровня. В данных поле '​t'​ 
-  * task_id - Id уровня. В данных поле '​tid'​ 
-  * game_id - Id игры. В данных поле '​gid'​ 
- 
- 
-==== Пример ==== 
- 
-Например:​ !api:​user_id,​task_id! 
- 
-Сгенерирует зашифрованную строку bc1443bbb42bafc0501bc821c2fb55a987fda029d4ea6657 которую можно расшифровать в {'​u':​15,​ '​tid:​32432} с помощью ключа игры. 
- 
-[[https://​qeng.org/​game.php?​jump_to&​gid=3493&​task_id=42719|Пример задания в игре]] 
- 
-==== Расшифровка ==== 
- 
-Пример расшифровки на PHP: 
-<code PHP> 
-$data='​0394334e96a2f0fa738470e9a9778c684ba214990d200eab';​ 
-$key='​XgHxzCvUSXwPfR7wBvdY4xHC6tSFLewx';​ 
-$decoded = json_decode( 
-  trim( 
-    openssl_decrypt( 
-      hex2bin($data),​ 
-      '​BF-ECB',​ 
-      $key, 
-      OPENSSL_RAW_DATA | OPENSSL_NO_PADDING 
-    ) 
-  ), 
-  true 
-); 
-// Расшифровуется в {'​u':​ 162862, '​tid':​ 42719} 
-</​code>​ 
- 
-Пример расшифровки на Python: 
-<code Python> 
-import binascii 
-import json 
-import typing 
- 
-# Чтобы установить blowfish, выполните `pip install blowfish` в cmd 
-import blowfish 
- 
- 
-def decrypt_qeng_data( 
-    data: str, 
-    key: bytes, 
-) -> typing.Dict[str,​ typing.Union[str,​ int]]: 
-    data = binascii.unhexlify(data) 
-    cipher = blowfish.Cipher(key) 
-    data_decrypted = b""​.join(cipher.decrypt_ecb(data)) 
-    data_decrypted = data_decrypted.rstrip(b'​\x00'​) 
-    data_json = json.loads(data_decrypted) 
-    return data_json 
- 
- 
-def main(): 
-    data = '​0394334e96a2f0fa738470e9a9778c684ba214990d200eab'​ 
-    # Обязательно ключ игры с b''​ 
-    key = b'​XgHxzCvUSXwPfR7wBvdY4xHC6tSFLewx'​ 
-    decrypted = decrypt_qeng_data(data,​ key) 
-    print(decrypted) 
-    # Выводит {'​u':​ 162862, '​tid':​ 42719} 
-    return None 
- 
- 
-if __name__ == '​__main__':​ 
-    main() 
-</​code>​ 
  • api_main.1634631780.txt.gz
  • Последние изменения: 2021/10/19 08:23
  • phaust