api_main

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
api_main [2021/10/19 05:30]
phaust Секции
api_main [2021/10/19 13:05]
phaust удалено
Строка 28: Строка 28:
 ==== Пример ==== ==== Пример ====
  
-Например:​ !api:​user_id,​task_id!+Например: ​''​!api:​user_id,​task_id!''​
  
-Сгенерирует зашифрованную строку ​bc1443bbb42bafc0501bc821c2fb55a987fda029d4ea6657 ​которую можно расшифровать в {'​u':​15, 'tid:32432} с помощью ключа игры.+Сгенерирует зашифрованную строку ​''​0394334e96a2f0fa738470e9a9778c684ba214990d200eab'', ​которую можно расшифровать в <​code>​ 
 +{'​u': ​162862, 'tid'42719} 
 +</​code>​ 
 +с помощью ключа игры ​''​XgHxzCvUSXwPfR7wBvdY4xHC6tSFLewx''​.
  
 [[https://​qeng.org/​game.php?​jump_to&​gid=3493&​task_id=42719|Пример задания в игре]] [[https://​qeng.org/​game.php?​jump_to&​gid=3493&​task_id=42719|Пример задания в игре]]
- 
 ==== Расшифровка ==== ==== Расшифровка ====
  
 Пример расшифровки на PHP: Пример расшифровки на 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: str,
 +) -> typing.Dict[str,​ typing.Union[str,​ int]]:
 +    data = binascii.unhexlify(data)
 +    cipher = blowfish.Cipher(key.encode())
 +    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'​
 +    key = '​XgHxzCvUSXwPfR7wBvdY4xHC6tSFLewx'​
 +    ​
 +    decrypted = decrypt_qeng_data(data,​ key)
 +    print(decrypted)
 +    # Выводит {'​u':​ 162862, '​tid':​ 42719}
 +    return None
  
-json_decode(trim(openssl_decrypt(hex2bin($data),​ '​BF-ECB',​ $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING)),​ true); 
  
 +if __name__ == '​__main__':​
 +    main()
 +</​code>​