1. 程式人生 > >Unity中新增AES加密

Unity中新增AES加密

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 initialization
	void 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 frame
	void Update () {
	
	}
}


相關推薦

Unity新增AES加密

using UnityEngine; using System.Collections; using System; using System.IO; using System.Security.Cryptography; using System.Text; /// &

nodejs與javascriptaes加密

nbsp new node odin ips ren nod bsp 格式 // var CryptoJS = require("crypto-js"); // var key = CryptoJS.enc.Utf8.parse("8NONwyJtHesysWpM");

ruby 實現javaaes 加密解密

abcde class hwm nbsp crypt 實現 () cbc sad def aes_encrypt() cipher = OpenSSL::Cipher::AES.new(128, :CBC) cipher.encrypt cipher.key =

淺談JAVA11新增加密算法

穿戴 明顯 jpg http 就是 tps 特性 體驗 又拍雲 時刻關註JDK進程或Oracle的童鞋都知道,JDK 11 已於6月底進入 Rampdown Phase One 階段,當時 JDK 11 的所有新特性就已被凍結,不再加入新的 JEP 。因為近期寫了一些關於D

VUEAES加密和解密

加密 pad aes加密 加密和解密 解密 如果 name con ase import CryptoJS from ‘crypto-js/crypto-js‘ // 默認的 KEY 與 iv 如果沒有給 const KEY = CryptoJS.enc.Utf8.pa

Unity新增元件的幾種方法

一、在編輯器上面新增一個元件。   二、在指令碼中利用AddComponent函式新增一個元件,例如: GameObject player; player.AddComponent<PlayerManager>();   三、利用Re

淺談JAVA11新增加密演算法

時刻關注JDK程序或Oracle的童鞋都知道,JDK 11 已於6月底進入 Rampdown Phase One 階段,當時 JDK 11 的所有新特性就已被凍結,不再加入新的 JEP 。因為近期寫了一些關於DES,3DES和AES演算法的一些博文,所以對於JDK11裡所

js和javaAES加密和解密

每次都要在這個問題上耗費一天的時間,所以這次留下記錄免得以後麻煩。 JS端使用CryptoJS,服務端bouncy castle提供的AES演算法。 AES演算法採用“AES/CBC/PKCS7Padding”,這個在JS和JAVA中都支援。Java預設的加

vue使用AES加密AES/ECB/PKCS5Padding)

       前端專案中遇到需要對登入密碼進行AES/ECB/PKCS5Padding加密,然後呼叫登入介面,傳入密碼,使用者名稱。現將實現方法,記錄下來。 第一步: 安裝crypto-js         vue專案中執行npm install crypto-js --

加密/解密】Botan AES 加密演算法例項

AES 演算法的金鑰和分塊大小可以是128,192,256位.例如,AES-128演算法加密後的密文的長度是 16位元組的整數倍.若明文長度小於16位元組,則密文長度為16位元組;若明文長度等於16位元組,則密文長度為32位元組.如果採用 AES-256, 則金鑰長度必須是

C# unity 關於RSA加密位元組太長的問題

using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using Syste

workerman使用aes加密

在ubuntu中,安裝mcrypt擴充套件 apt-get install php5-mcrypt  libmcrypt-dev aes.php <?php define('SECRETKEY', 'key'); define('SECRETIV', 'iv'

unity新增選單欄

//建立Assets下建立cs指令碼,如下: using UnityEngine; using System.Collections; using UnityEditor;//需要使用到UnityEditor public class WindowTest : Mon

AES加密解密 Java運用

upper span pub substring rac ont wid mem log AES全稱 Advanced Encryption Standard, 高級加密算法,更加安全,可取代DES。 Aes: package com.blog.d201706.en

PHPAES加密解密類

我們在工作中會遇到各種加密,下面就是PHP中AES加密解密的類 <?php  class Aes {     /**      * var string&nbs

使用CryptoJS的md5和aes加密

使用CryptoJS中的md5和aes加密 參考資料: 使用CryptoJS中的md5和aes加密 CryptoJS實現AES加密 // md5 function md5encode(word) { return CryptoJS.MD5(word

golangAes加密方法

因專案中go程式與java程式需要傳輸一些加密資料,以下為整理後的Aes(CBC模式)加密解密方法,因java中aes所用的填充演算法為PKCS5padding(具體內容可自行查閱),所以在本示例中也採用PKCS5padding package encrypt impor

[譯] 最佳安全實踐:在 Java 和 Android 使用 AES 進行對稱加密

原文地址:Security Best Practices: Symmetric Encryption with AES in Java and Android 原文作者:Patrick Favre-Bulle 最佳安全實踐:在 Java 和 Android 中使用 AES 進行

ARX專案新增開源資料庫SQLite3 的加密開源庫wxsqlite3

RX新增wxsqlite3加密資料庫,  下載 https://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/  複製這11個檔案到你出cpp目錄      新增&nbs

PHP7.2AES加密解密方法mcrypt_module_open()替換方案

直接粘程式碼,該類是基於微信公眾號訊息加密解密所提供的PHP DEMO改造而來,目前使用於彬彬大學APP介面token校驗中。php的mcrypt 擴充套件已經過時了大約10年,並且用起來很複雜。因此它被廢棄並且被 OpenSSL 所取代。 從PHP 7.2起它將被從核心程式