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);

    }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值