RSA加密在Unity3D中的應用

重點 :

三個參數: n.  e1.  e2.    n是兩個大質數p、q的積,n的二進制表示時所佔用的位數,就是所謂的密鑰長度。e1和e2是一對相關的值,e1可以任意取

術語:

公鑰.   PublicKey

私鑰.   PrivateKey

明文    Plaintext

密文.   Ciphertext

C#腳本實現

using System;

using System.Collections;

using System.Collections.Generic;

using System.IO;

using System.Security.Cryptography;

using System.Text;

using UnityEngine;

public class Enc : MonoBehaviour

{

    // Start is called before the first frame update

    void Start()

    {

        var path = Application.streamingAssetsPath;

        var privateKey = File.ReadAllText(path + "/privateKey.xml");

        var publicKey = File.ReadAllText(path + "/publicKey.xml");

string macid = SystemInfo.deviceUniqueIdentifier;//獲取電腦id

        //macid轉換成64位的string

        byte[] bys = System.Text.Encoding.UTF8.GetBytes(macid);

        string a2 = Convert.ToBase64String(bys);

        byte[] by2 = RSAEncrypt(publicKeybys);//加密64位的string

        string str = Convert.ToBase64String(by2);//返回加密後的64string

        print(str);

 

        //解密a  a64string

        string a = "L4gJ8xa6ZVjqwkN2L+e3VpheESfL4NfvVm0utzZHPJEerqT3tqMH0QDGPFzlLwq1rr8M1Xjs4Rg9tSq/jYhk7sNY6KgsbC2RgYv65Z/cCuWH+23ZPTPFtjInQsJb/4DU7lTHgwsQ3UXjT4oapgP8VOpjTNqx7lMDOHLyHJyWG/Q=";

        byte[] mimi = Convert.FromBase64String(a);

        byte[] jiemi = RSADecrypt(privateKeymimi);

        string mingwen = Convert.ToBase64String(jiemi);

        print(mingwen);

    }

       // Update is called once per frame

    void Update()

    {

    }

    /// <summary>RSAs the encrypt.RSA加密.</summary>

    /// <param name="publickey">The publickey.</param>

    /// <param name="data">The data.</param>

    /// <returns></returns>

    public static byte[] RSAEncrypt(string publickeybyte[] data)

    {

        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

        rsa.FromXmlString(publickey);

        var bytes = rsa.Encrypt(datafalse);

        return bytes;

    }

    /// <summary>RSAs the decrypt.RSA解密.</summary>

    /// <param name="privatekey">The privatekey.</param>

    /// <param name="data">The data.</param>

    /// <returns></returns>

    public static byte[] RSADecrypt(string privatekeybyte[] data)

    {

        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

        rsa.FromXmlString(privatekey);

        var bytes = rsa.Decrypt(datafalse);

        return bytes;

    }

    /// <summary>Generates the keys.生成密鑰.</summary>

    public static void GenerateKeys()

    {

        

        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

        var privateKey = rsa.ToXmlString(true);

        var publicKey = rsa.ToXmlString(false);

        var path = Application.streamingAssetsPath;

        File.WriteAllText(path + "/privateKey.xml"privateKey);

        File.WriteAllText(path + "/publicKey.xml"publicKey);

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章