博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D_Util_加密
阅读量:7121 次
发布时间:2019-06-28

本文共 8262 字,大约阅读时间需要 27 分钟。

Unity开发中常用的加密算法 MD5,Sha1、CRC32,Des,Res等的实现

public class EncryptUtil    {        #region MD5        public static string MD5Encrypt(string str, int length = 32)        {            if (string.IsNullOrEmpty(str))                return string.Empty;            byte[] result = Encoding.UTF8.GetBytes(str);            MD5 md5 = MD5.Create();            byte[] output = md5.ComputeHash(result);            return HandlBytes(output, length);        }        public static string AbstractFileMD5(string fileName, int length = 32)        {            if (string.IsNullOrEmpty(fileName))                return string.Empty;            using (FileStream file = new FileStream(fileName, FileMode.Open))            {                MD5 md5 = MD5.Create();                byte[] retVal = md5.ComputeHash(file);                return HandlBytes(retVal, length);            }        }        public static string HandlBytes(byte[] intput, int length = 32)        {            string md5Str = string.Empty;            switch (length)            {                case 16:                    md5Str = BitConverter.ToString(intput, 4, 8);                    break;                default:                    md5Str = BitConverter.ToString(intput);                    break;            }            return md5Str.Replace("-", "");        }        #endregion        #region Sha1        public static string AbstractFileSha1(string fileName)        {            if (string.IsNullOrEmpty(fileName))                return string.Empty;            using (FileStream file = new FileStream(fileName, FileMode.Open))            {                SHA1 md5 = SHA1.Create();                byte[] retVal = md5.ComputeHash(file);                return HandlBytes(retVal);            }        }        public static string EncryptSha1(string str)        {            if (string.IsNullOrEmpty(str))                return string.Empty;            var buffer = Encoding.UTF8.GetBytes(str);            var output = SHA1.Create().ComputeHash(buffer);            return HandlBytes(output);        }        #endregion        #region CRC32        public static string AbstractFileCRC32(string fileName)        {            if (string.IsNullOrEmpty(fileName))                return string.Empty;            var buffer = File.ReadAllBytes(fileName);            var output = CRC32.Create().ComputeHash(buffer);            return string.Format("{0:X8}", output);        }        public static string EncryptCRC32(string str)        {            if (string.IsNullOrEmpty(str))                return string.Empty;            var buffer = Encoding.UTF8.GetBytes(str);            var output = CRC32.Create().ComputeHash(buffer);            return string.Format("{0:X8}", output);        }        class CRC32        {            protected ulong[] Crc32Table;            private CRC32()            {                //生成码表                GetCRC32Table();            }            //生成CRC32码表            public void GetCRC32Table()            {                ulong Crc;                Crc32Table = new ulong[256];                int i, j;                for (i = 0; i < 256; i++)                {                    Crc = (ulong)i;                    for (j = 8; j > 0; j--)                    {                        if ((Crc & 1) == 1)                            Crc = (Crc >> 1) ^ 0xEDB88320;                        else                            Crc >>= 1;                    }                    Crc32Table[i] = Crc;                }            }            //获取字符串的CRC32校验值            public ulong ComputeHash(byte[] buffer)            {                ulong value = 0xffffffff;                int len = buffer.Length;                for (int i = 0; i < len; i++)                {                    value = (value >> 8) ^ Crc32Table[(value & 0xFF) ^ buffer[i]];                }                return value ^ 0xffffffff;            }            public static CRC32 Create()            {                return new CRC32();            }        }        #endregion        #region Des加密        private static void HandlDesStr(ref string key)        {            if (key.Length >= 8)            {                key = key.Substring(0, 8);            }            else            {                StringBuilder sb = new StringBuilder();                sb.Append(key);                for (int i = 0; i < 8 - key.Length; i++)                {                    sb.Append("#");                }                key = sb.ToString();            }        }        ///         ///         ///         /// 必须是八位字符串        /// 必须是八位字符串        ///         /// 
public static string DesEncrypt(string str, string key, string iv) { if (string.IsNullOrEmpty(str)) return string.Empty; HandlDesStr(ref key); HandlDesStr(ref iv); DESCryptoServiceProvider dsp = new DESCryptoServiceProvider(); using (MemoryStream memStream = new MemoryStream()) { try { CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(Encoding.UTF8.GetBytes(key), Encoding.UTF8.GetBytes(iv)), CryptoStreamMode.Write); StreamWriter sWriter = new StreamWriter(crypStream); sWriter.Write(str); sWriter.Flush(); crypStream.FlushFinalBlock(); memStream.Flush(); return Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length); } catch (Exception e) { Debug.LogError(e); return string.Empty; } } } public static string DesDecrypt(string str, string key, string iv) { if (string.IsNullOrEmpty(str)) return string.Empty; HandlDesStr(ref key); HandlDesStr(ref iv); DESCryptoServiceProvider dsp = new DESCryptoServiceProvider(); byte[] buffer = Convert.FromBase64String(str); using (MemoryStream memStream = new MemoryStream()) { try { CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(Encoding.UTF8.GetBytes(key), Encoding.UTF8.GetBytes(iv)), CryptoStreamMode.Write); crypStream.Write(buffer, 0, buffer.Length); crypStream.FlushFinalBlock(); return ASCIIEncoding.UTF8.GetString(memStream.ToArray()); } catch (Exception e) { Debug.LogError(e); return string.Empty; } } } #endregion #region Res public static string RsaDecrypt(string str, string decryptKey) { if (string.IsNullOrEmpty(str)) return string.Empty; byte[] dataToDecrypt = Convert.FromBase64String(str); RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); RSA.FromXmlString(decryptKey); byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false); UnicodeEncoding ByteConverter = new UnicodeEncoding(); return ByteConverter.GetString(resultBytes); } public static KeyValuePair
GetResaKeyPair() { RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); string publicKey = RSA.ToXmlString(false); string privateKey = RSA.ToXmlString(true); return new KeyValuePair
(publicKey, privateKey); } public static string ResEncrypt(string str, string encryptKey) { if (string.IsNullOrEmpty(str)) return string.Empty; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(encryptKey); UnicodeEncoding ByteConverter = new UnicodeEncoding(); byte[] DataToEncrypt = ByteConverter.GetBytes(str); byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false); return Convert.ToBase64String(resultBytes); } #endregion }

 

转载于:https://www.cnblogs.com/PandaHome/p/10934734.html

你可能感兴趣的文章
ROS机器人程序设计(原书第2版)2.2 理解ROS计算图级
查看>>
《破茧成蝶——用户体验设计师的成长之路》一1.3 用户体验设计的特征
查看>>
R语言数据挖掘2.2.4.3 R语言实现
查看>>
Predicate和Consumer接口– Java 8中java.util.function包下的接口
查看>>
《Dreamweaver CS6完美网页制作——基础、实例与技巧从入门到精通》——2.3 网页色彩搭配知识...
查看>>
企业上云实战分享
查看>>
SSM框架Web程序的流程(Spring SpringMVC Mybatis)
查看>>
阿里云人工智能识别篮球动作视频
查看>>
Ali Kernel introduction
查看>>
前端常见兼容问题系列5:¥符号在部分Android APP的WebView中不见了
查看>>
基于Reactjs实现webapp(加精)
查看>>
超强、超详细Redis数据库入门教程
查看>>
《C++语言基础》实践项目——多重继承
查看>>
京颐集团上云之路:如何助力中小型医疗行业信息化与全面上云?
查看>>
Python yield与实现
查看>>
mongodb一些使用技巧或注意事项记录
查看>>
C# 浅拷贝与深拷贝区别 解惑篇
查看>>
nested loop,merge join,hash join与子查询优化
查看>>
注册过程太痛苦,昵称起了一箩筐还是没有可用的,前端校验和后台查询不一致用户体验太差...
查看>>
Munin进阶使用
查看>>