重點 :
三個參數: 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(publicKey, bys);//加密64位的string
string str = Convert.ToBase64String(by2);//返回加密後的64位string
print(str);
//解密a a是64位string
string a = "L4gJ8xa6ZVjqwkN2L+e3VpheESfL4NfvVm0utzZHPJEerqT3tqMH0QDGPFzlLwq1rr8M1Xjs4Rg9tSq/jYhk7sNY6KgsbC2RgYv65Z/cCuWH+23ZPTPFtjInQsJb/4DU7lTHgwsQ3UXjT4oapgP8VOpjTNqx7lMDOHLyHJyWG/Q=";
byte[] mimi = Convert.FromBase64String(a);
byte[] jiemi = RSADecrypt(privateKey, mimi);
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 publickey, byte[] data)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publickey);
var bytes = rsa.Encrypt(data, false);
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 privatekey, byte[] data)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privatekey);
var bytes = rsa.Decrypt(data, false);
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);
}
}