GQ_Communicate/GQ_TongXin/Assets/script/加密/EncryptionScript.cs

195 lines
5.3 KiB
C#

using Newtonsoft.Json;
using System;
using System.Collections;
using System.Net.Http;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
[AddComponentMenu("EncryptionScript/密钥")]
public class EncryptionScript : MonoBehaviour
{
public string encryptionKey = "defaultKey";
private string url_key = "http://172.16.1.253:8087/priceRule.json";
[SerializeField] private string inputKey = null;
/// <summary>
/// 密钥是否过期
/// </summary>
public static bool isOverdueKey = true;
/// <summary>
/// 密钥运行时间
/// </summary>
private float elapsedTime = 0;
/// <summary>
/// 密钥有效时间
/// </summary>
private float averageSecondsInMonth = 5270400f;
private /*async*/ void Start()
{
//await GetKey();//读取JSON获取密钥
encryptionKey = (KeyGenerator.GenerateKey("123"));
averageSecondsInMonth = 5f;
}
private /*async*/ void Update()
{
// 等待用户输入密钥
if (elapsedTime > averageSecondsInMonth || Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
{
//await GetKey();//读取JSON更新密钥
if (elapsedTime > averageSecondsInMonth)
{
encryptionKey = (KeyGenerator.GenerateKey("123"));//更新密钥
isOverdueKey = true;
}
if (isOverdueKey && encryptionKey.Equals(inputKey))
{
ResetTimer();
isOverdueKey = false;
Debug.Log("密钥正确,继续运行程序");
}
else if (isOverdueKey)
{
Debug.Log("密钥错误,程序无法运行");
Application.Quit(); // 密钥错误,退出应用程序
}
}
/*else if (isOverdueKey && Input.GetKeyDown(KeyCode.Backspace))
{
if (inputKey.Length >= 1)
inputKey = inputKey.Substring(0, inputKey.Length - 1);
else
return;
}
else if (isOverdueKey && Input.anyKeyDown)
{
inputKey += Input.inputString;
}*/
else if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))
{
if (isOverdueKey && Input.GetKeyDown(KeyCode.V))
{
string pasteText = GUIUtility.systemCopyBuffer; // 获取系统粘贴板的内容
inputKey = pasteText; // 将粘贴的值赋给Input字段
}
}
}
private void LateUpdate()
{
//elapsedTime += Time.deltaTime;
//Debug.Log("elapsedTime: " + elapsedTime);
}
/// <summary>
/// 重置计时器、秘钥有效期更新
/// </summary>
public void ResetTimer()
{
elapsedTime = 0f;
averageSecondsInMonth = 5270400f;
}
private IEnumerator Get_Api(string url_pice, Action<string> callback)
{
string apiDoc_p = null;
yield return StartCoroutine(GetApiDocumentation(url_pice, (result) =>
{
apiDoc_p = result;
}));
//var apiDoc_p = await GetApiDocumentation(url_pice);
callback.Invoke(apiDoc_p);
}
private IEnumerator GetApiDocumentation(string apiUrl, Action<string> callback)
{
using (UnityWebRequest request = UnityWebRequest.Get(apiUrl))
{
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.LogError(request.error);
callback(null);
}
else
{
string responseBody = request.downloadHandler.text;
// 处理响应内容
callback(responseBody);
}
}
}
[System.Serializable]
public class Data
{
/// <summary>
///
/// </summary>
public double flat;
/// <summary>
///
/// </summary>
public double tip;
/// <summary>
///
/// </summary>
public double valley;
/// <summary>
///
/// </summary>
public double peak;
}
[System.Serializable]
public class Root
{
/// <summary>
///
/// </summary>
public Data data;
/// <summary>
///
/// </summary>
public int code;
/// <summary>
///
/// </summary>
public string msg;
}
public IEnumerator GetKey()
{
string apiData = null;
yield return StartCoroutine(Get_Api(url_key,
(result) =>
{
apiData = result;
}));
try
{
//var apiData = await Get_Api(url_key);
if (apiData != null)
{
Debug.Log("API CabinetList: " + apiData);
Root root = JsonConvert.DeserializeObject<Root>(apiData);
encryptionKey = root.data.flat.ToString();
}
else
{
Debug.Log("API请求失败或返回空数据。");
}
}
catch (Exception e)
{
Debug.LogError("API请求期间发生错误: " + e.Message);
}
}
}