|
|
using Newtonsoft.Json.Linq;
|
|
|
using Newtonsoft.Json;
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Text;
|
|
|
using UnityEngine;
|
|
|
using UnityEngine.Networking;
|
|
|
using UnityEngine.UI;
|
|
|
|
|
|
|
|
|
public class EducoderText : MonoBehaviour
|
|
|
{
|
|
|
public static EducoderText Instance;
|
|
|
public Text text;
|
|
|
private int shiftValue=3;
|
|
|
|
|
|
public string decryptedText;
|
|
|
|
|
|
public string userName = "";
|
|
|
public string url = "https://data.educoder.net/api/users/get_user_info.json?objective_type=shixun&objective_id=xolfhc7f&school=1";
|
|
|
|
|
|
|
|
|
private void Start()
|
|
|
{
|
|
|
Instance = this;
|
|
|
|
|
|
//// 示例使用
|
|
|
//string plaintext = "zart2007";
|
|
|
|
|
|
|
|
|
//string encryptedText = Encrypt(plaintext, shiftValue);
|
|
|
////Console.WriteLine("Encrypted text: " + encryptedText);
|
|
|
//Debug.Log("Encrypted text: " + encryptedText);
|
|
|
|
|
|
//decryptedText = Decrypt(encryptedText, shiftValue);
|
|
|
//Debug.Log("Encrypted text: " + decryptedText);
|
|
|
////Console.WriteLine("Decrypted text: " + decryptedText);
|
|
|
|
|
|
|
|
|
////三个文本解密后
|
|
|
|
|
|
//if (decryptedText.Contains(userName))
|
|
|
//{
|
|
|
// Debug.Log("yes");
|
|
|
//}
|
|
|
}
|
|
|
|
|
|
public void Open() //开始判断文本解密后对比
|
|
|
{
|
|
|
string plaintext = GameManager.Instance.answers[2];
|
|
|
string encryptedText = Encrypt(plaintext, shiftValue);
|
|
|
//Console.WriteLine("Encrypted text: " + encryptedText);
|
|
|
Debug.Log("Encrypted text: " + encryptedText);
|
|
|
|
|
|
decryptedText = Decrypt(encryptedText, shiftValue);
|
|
|
Debug.Log("Encrypted text: " + decryptedText);
|
|
|
|
|
|
// StartCoroutine(SendGetRequest());
|
|
|
SendRequest();
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
private void SendRequest()
|
|
|
{
|
|
|
//发送请求并接收
|
|
|
EduCoderTool.WebConnecter.Singleton.SendMsg("type", "getTaskData");
|
|
|
//解析
|
|
|
string jsonstr = text.text;
|
|
|
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonstr);
|
|
|
if (jo == null)
|
|
|
{
|
|
|
Debug.Log("获取用户信息失败");
|
|
|
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
string userLogin = jo["user"]["login"].ToString();
|
|
|
Debug.Log("Login"+userLogin);
|
|
|
|
|
|
if (userLogin.Contains(decryptedText))
|
|
|
{
|
|
|
|
|
|
if (GameManager.Instance.succeed)
|
|
|
{
|
|
|
|
|
|
GameManager.Instance.OverWnd.SetActive(true);
|
|
|
EduCoderTool.WebConnecter.Singleton.SendResultToWeb(true);
|
|
|
Debug.Log("yes");
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GameManager.Instance.FailWnd.SetActive(true);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GameManager.Instance.FailWnd.SetActive(true);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
IEnumerator SendGetRequest()
|
|
|
{
|
|
|
using (UnityWebRequest request = UnityWebRequest.Get(url))
|
|
|
{
|
|
|
yield return request.SendWebRequest();
|
|
|
|
|
|
if (request.isNetworkError)
|
|
|
{
|
|
|
Debug.Log(request.error);
|
|
|
Debug.Log("网络错误");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Debug.Log("成功");
|
|
|
// 打印服务端返回的数据
|
|
|
Debug.Log(request.downloadHandler.text);
|
|
|
//解析获取用户名
|
|
|
UserData data = JsonUtility.FromJson(request.downloadHandler.text,typeof(UserData))as UserData;
|
|
|
Debug.Log(data.login);
|
|
|
Debug.Log(data.user_id);
|
|
|
userName = data.login;
|
|
|
//在这里获取了平台的用户名
|
|
|
//TODO:用通过用解密方法去解密那三个文本的结果,和这个用户名进行对比, 有一个相符的,就算通关
|
|
|
|
|
|
|
|
|
if (userName.Contains(decryptedText))
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
if (GameManager.Instance.succeed)
|
|
|
{
|
|
|
|
|
|
GameManager.Instance.OverWnd.SetActive(true);
|
|
|
EduCoderTool.WebConnecter.Singleton.SendResultToWeb(true);
|
|
|
Debug.Log("yes");
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GameManager.Instance.FailWnd.SetActive(true);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
GameManager.Instance.FailWnd.SetActive(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
//向平台发送通关结果指令如下
|
|
|
// EducoderTool.Web.SinleTon.SendResult(true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
public static string Encrypt(string text, int shift)
|
|
|
{
|
|
|
string encryptedText = "";
|
|
|
foreach (char c in text)
|
|
|
{
|
|
|
// 获取字符的 UTF-16 编码
|
|
|
int utf16Val = (int)c;
|
|
|
// 根据编码值进行移位加密
|
|
|
int shiftedVal = utf16Val + shift;
|
|
|
// 将移位后的编码值转换为字符,并添加到加密文本中
|
|
|
encryptedText += (char)shiftedVal;
|
|
|
}
|
|
|
return encryptedText;
|
|
|
}
|
|
|
|
|
|
public static string Decrypt(string encryptedText, int shift)
|
|
|
{
|
|
|
string decryptedText = "";
|
|
|
foreach (char c in encryptedText)
|
|
|
{
|
|
|
// 获取字符的 UTF-16 编码
|
|
|
int utf16Val = (int)c;
|
|
|
// 根据编码值进行移位解密
|
|
|
int shiftedVal = utf16Val - shift;
|
|
|
// 将移位后的编码值转换为字符,并添加到解密文本中
|
|
|
decryptedText += (char)shiftedVal;
|
|
|
}
|
|
|
return decryptedText;
|
|
|
}
|
|
|
|
|
|
//public static string Decrypt(string encrypted_text, int shift = 3)
|
|
|
//{
|
|
|
// string decrypted_text = "";
|
|
|
// for (int i = 0; i < encrypted_text.Length; i++)
|
|
|
// {
|
|
|
// // 获取字符的 UTF-16 编码
|
|
|
// int utf16_val = (int)encrypted_text[i];
|
|
|
// // 将 UTF-16 编码转换为 UTF-8 编码
|
|
|
// byte[] utf8_bytes = Encoding.UTF8.GetBytes(char.ConvertFromUtf32(utf16_val));
|
|
|
// int utf8_val = utf8_bytes[0];
|
|
|
// // 根据编码值进行移位解密
|
|
|
// int shifted_val = utf8_val - shift;
|
|
|
// // 将移位后的编码值转换为字符,并添加到解密文本中
|
|
|
// decrypted_text += Convert.ToChar(shifted_val);
|
|
|
// }
|
|
|
// return decrypted_text.Substring(0, decrypted_text.Length - 3);
|
|
|
//}
|
|
|
|
|
|
|
|
|
[System.Serializable]
|
|
|
public class UserData
|
|
|
{
|
|
|
|
|
|
public string login;
|
|
|
public string real_name;
|
|
|
public int user_id;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|