Unity中添加AES加密
来源:互联网 发布:苏州大学网络网上缴费 编辑:程序博客网 时间:2024/05/22 03:01
using UnityEngine;using System.Collections;using System;using System.IO;using System.Security.Cryptography;using System.Text;/// <summary>/// AES加密算法/// </summary>public class AESEncryption : MonoBehaviour { /// <summary> /// 默认密钥向量 /// </summary> private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; /// <summary> /// AES加密算法 /// </summary> /// <param name="plainText">明文字符串</param> /// <param name="strKey">密钥</param> /// <returns>返回加密后的密文字节数组</returns> public static byte[] AESEncrypt(string plainText, string strKey) { //分组加密算法 SymmetricAlgorithm des = Rijndael.Create(); des.Padding = PaddingMode.None; byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);//得到需要加密的字节数组 int covering = (inputByteArray.Length + 1) % 16; int coveringLength = 0; if (covering != 0)//手动补位 { coveringLength = 16 - covering; } int dataLength = (inputByteArray.Length + 1) + coveringLength; byte[] dataArray = new byte[dataLength]; Buffer.BlockCopy(inputByteArray, 0, dataArray, 0, inputByteArray.Length); dataArray[dataArray.Length - 1] = Convert.ToByte(coveringLength); //设置密钥及密钥向量 des.Key = Encoding.UTF8.GetBytes(strKey); des.IV = _key1; MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(dataArray, 0, dataArray.Length); cs.FlushFinalBlock(); byte[] cipherBytes = ms.ToArray();//得到加密后的字节数组 cs.Close(); ms.Close(); return cipherBytes; } /// <summary> /// AES加密算法 /// </summary> /// <param name="inputByteArray">明文</param> /// <param name="strKey">密钥</param> /// <returns>返回加密后的密文字节数组</returns> public static byte[] AESEncrypt(byte[] inputByteArray, string strKey) { //分组加密算法 SymmetricAlgorithm des = Rijndael.Create(); des.Padding = PaddingMode.None; int covering = (inputByteArray.Length + 1) % 16; int coveringLength = 0; if (covering != 0)//手动补位 { coveringLength = 16 - covering; } int dataLength = (inputByteArray.Length + 1) + coveringLength; byte[] dataArray = new byte[dataLength]; Buffer.BlockCopy(inputByteArray, 0, dataArray, 0, inputByteArray.Length); dataArray[dataArray.Length - 1] = Convert.ToByte(coveringLength); //设置密钥及密钥向量 des.Key = Encoding.UTF8.GetBytes(strKey); des.IV = _key1; MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(dataArray, 0, dataArray.Length); cs.FlushFinalBlock(); byte[] cipherBytes = ms.ToArray();//得到加密后的字节数组 cs.Close(); ms.Close(); return cipherBytes; } /// <summary> /// AES解密 /// </summary> /// <param name="cipherText">密文字节数组</param> /// <param name="strKey">密钥</param> /// <returns>返回解密后的字符串</returns> public static byte[] AESDecrypt(byte[] cipherText, string strKey) { SymmetricAlgorithm des = Rijndael.Create(); des.Key = Encoding.UTF8.GetBytes(strKey); des.IV = _key1; des.Padding = PaddingMode.None; byte[] decryptBytes = new byte[cipherText.Length]; MemoryStream ms = new MemoryStream(cipherText); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read); cs.Read(decryptBytes, 0, decryptBytes.Length); int length = Convert.ToInt32(decryptBytes.Length - 1); byte[] databytes = new byte[decryptBytes.Length - 1 - length]; Buffer.BlockCopy(decryptBytes, 0, databytes, 0, databytes.Length); cs.Close(); ms.Close(); return databytes; }}
using UnityEngine;using System.Collections;public class StartGame : MonoBehaviour { /// <summary> /// 密钥(系统自动随机的密钥) /// </summary> string keys = ""; /// <summary> /// 注册码(玩家输入的注册码) /// </summary> string inputLicense = ""; string numChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; void Awake() { #region 获取随机秘钥 for (int i = 0; i < 16; i++) { keys += numChar.Substring(Random.Range(0, 61), 1); } Debug.Log("keys: " + keys); #endregion }// Use this for initializationvoid Start () { #region 系统根据密钥自动得出的注册码 string outLicense = ""; for (int i = 0; i < 16; i++) { outLicense += AESEncryption.AESEncrypt("AEROSPACE", keys)[i].ToString("X"); } Debug.Log("outLicense: " + outLicense); #endregion #region 注册码进行对比 if (inputLicense == outLicense) { Debug.Log("验证通过"); } else { Debug.Log("验证未通过"); } #endregion }// Update is called once per framevoid Update () {}}
0 0
- Unity中添加AES加密
- unity MD5/AES加密
- node中aes加密
- JAVA中使用AES加密
- golang 中AES加密详解
- Android 中AES加密举例
- AES五中加密模式
- workerman中使用aes加密
- android中采用AES进行加密
- 利用openssl中AES加密文件
- java中AES加密的简单使用
- VS中使用openssl/aes加密解密
- JAVA中AES加密和解密
- swift中调用OC对称加密AES
- OpenSSL中AES加密的用法
- Android中AES加密和解密
- JAVA中AES对称加密和解密
- JAVA中AES对称加密和解密
- 远程连接mysql 授权方法详解
- 归并排序算法笔记
- eclipse快捷键大全
- as插件Parcelable介绍
- 公司提成
- Unity中添加AES加密
- Option,None和Some
- 动态规划-钢条切割
- 移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇
- nbench 使用方法
- 位图法寻找数组中重复出现的数字
- 怒刷leetcode题目(3)226,83,142,86
- 54.变换UIButton中的label和image的位置
- 正则表达式