Unity 3D 文件加密下 AES的加密解密使用

版本:unity 5.4.1  语言:C#

 

这本书有点蛋疼,说了配置文件的读取之后,他说了两种算法:

//OBFS 加密算法
private static string OBFS(string str)
{
   int length = str.Length;
   var array = new char[length];
   for(int i = 0; i < array.Length; ++i)
   {
        char c = str[i];
        var b = (byte)(c ^ length - i);
        var b2 = (byte)((c >> 8) ^ i);
        array[i] = (char)(b2 << 8 | b);
}
    return new string(array);
}
 
//SHA512 加密算法
private static string GetSHA512Password(string password)
{
   byte[] bytes = Encoding.UTF7.GetBytes(password);
   byte[] result;
   SHA512 shaM = new SHA512Managed();
   result = shaM.ComputeHash(bytes);      
   StringBuilder sb = new StringBuilder();
   foreach(byte b in result)
   {
        sb.AppendFormat("{0:x2}", b);
   }
   return sb.ToString();
}


 

说是加密文件的,但是我根本没看明白,加密文件的话至少也得有解密吧?OBFS这个算法我没查到,不过SHA512是哈希算法,根本不可逆,加密之后怎么解密?

 

看看函数的名字,Password,这就是把用户的密码加密后放到数据库中,然后用户输入密码,再将输入的密码加密,最后两个加密的字符串进行对比的节奏啊。。这不是文件加密啊。。。

 

说完这个之后作者提到了Zip的压缩,但和本章主题根本没有关系吧。

 

网上查到比较有名的加密解密算法就是AES、DES、RC4等。

 

这边提供一下AES的加密解密,C#中已经实现:

public static string myEncrypt(string data)
{
    byte[] bs = Encoding.UTF8.GetBytes(data);
 
    RijndaelManaged aes256 = new RijndaelManaged();
    aes256.Key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");
    aes256.Mode = CipherMode.ECB;
    aes256.Padding = PaddingMode.PKCS7;
 
    return Convert.ToBase64String(aes256.CreateEncryptor().TransformFinalBlock(bs, 0, bs.Length));
}
 
public static string myDecrypt(string data)
{
    byte[] bs = Convert.FromBase64String(data);
 
    RijndaelManaged aes256 = new RijndaelManaged();
    aes256.Key = Encoding.UTF8.GetBytes("12345678901234567890123456789012");
    aes256.Mode = CipherMode.ECB;
    aes256.Padding = PaddingMode.PKCS7;
 
    return Encoding.UTF8.GetString(aes256.CreateDecryptor().TransformFinalBlock(bs, 0, bs.Length));
}


 

注释就不加了,需要注意的是加密后获得的bytes千万别用UTF8去获取字符串,不然会有信息损失,导致后面解密失败。

 

嗯,今天就讲这些,明天继续看书。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是UnityAES加密解密的示例代码: 加密代码: ```csharp using System.Security.Cryptography; using UnityEngine; public static class AESEncryption { private static readonly byte[] Key = new byte[16] { 215, 254, 100, 91, 10, 69, 23, 146, 12, 175, 237, 65, 38, 205, 85, 111 }; private static readonly byte[] IV = new byte[16] { 183, 221, 44, 251, 126, 7, 77, 234, 154, 150, 97, 24, 165, 2, 153, 201 }; public static string Encrypt(string plainText) { byte[] encrypted; using (Aes aesAlg = Aes.Create()) { aesAlg.Key = Key; aesAlg.IV = IV; ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); using (System.IO.MemoryStream msEncrypt = new System.IO.MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (System.IO.StreamWriter swEncrypt = new System.IO.StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } encrypted = msEncrypt.ToArray(); } } } return System.Convert.ToBase64String(encrypted); } } ``` 解密代码: ```csharp using System.Security.Cryptography; using UnityEngine; public static class AESEncryption { private static readonly byte[] Key = new byte[16] { 215, 254, 100, 91, 10, 69, 23, 146, 12, 175, 237, 65, 38, 205, 85, 111 }; private static readonly byte[] IV = new byte[16] { 183, 221, 44, 251, 126, 7, 77, 234, 154, 150, 97, 24, 165, 2, 153, 201 }; public static string Decrypt(string cipherText) { byte[] cipherBytes = System.Convert.FromBase64String(cipherText); using (Aes aesAlg = Aes.Create()) { aesAlg.Key = Key; aesAlg.IV = IV; ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); using (System.IO.MemoryStream msDecrypt = new System.IO.MemoryStream(cipherBytes)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (System.IO.StreamReader srDecrypt = new System.IO.StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } } } ``` 注意:这个示例代码中的密钥和向量都是为了演示而写死的,请根据实际需求使用更安全的方式生成密钥和向量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值