Unity中使用DES加密数据

3/8/2017来源:ASP.NET技巧人气:1452

/// <summary>
    /// 加密
    /// </summary>
    /// <param name="SourceText">需要加密的原字符串</param>
    /// <param name="key">秘钥</param>
    /// <returns></returns>
    public string Encrypt_UTF8(string SourceText,string key)
    {
        //实现一个加密服务的类的对象,这个类提供了DES加密算法
        DESCryptoServicePRovider desProvider = new DESCryptoServiceProvider();

        //因为加密内容有可能包含汉字,所以用UTF8格式,将加密的字符串保存在字节数组里
        byte[] inputBytesArray = Encoding.UTF8.GetBytes(SourceText);

        //设置算法的秘钥和初始化向量,需要转换为ASCII码的二进制数据
        desProvider.Key = Encoding.ASCII.GetBytes(key);
        desProvider.IV = Encoding.ASCII.GetBytes(key);

        //实现一个内存流写入加密后的数据
        MemoryStream memoryStream = new MemoryStream();

        //实现一个加密转换流,其中包含要将加密后的内容写入的内存流对象,用DESCrytoServiceProvider创建的加密器,模式为写入数据
        CryptoStream cryptoStream = new CryptoStream(memoryStream, desProvider.CreateEncryptor(), CryptoStreamMode.Write);

        //将需要加密的字符串通过加密流写入到内存流中
        cryptoStream.Write(inputBytesArray, 0, inputBytesArray.Length);

        //更新内存流存储块,然后清除缓存
        cryptoStream.FlushFinalBlock();

        //用来将加密后的数据填充为一个字符串返回
        StringBuilder builder = new StringBuilder();
        byte[] byteArray = memoryStream.ToArray();
        for (int i = 0; i < byteArray.Length; i++)
        {
            //builder.Append(byteArray[i]);
            builder.AppendFormat("{0:X2}", byteArray[i]);
        }
        return builder.ToString();
    }

解密方法

 /// <summary>
    /// 解密
    /// </summary>
    /// <param name="DecryptText">需要解密的字符串</param>
    /// <param name="sKey">秘钥</param>
    /// <returns></returns>
    public string DesDecrypt(string DecryptText, string sKey)
    {
        //实现一个加密服务的类的对象,这个类提供了DES加密算法
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();

        //实现一个二进制数组保存将需要解密的字符转换为二进制后的数据,因为加密后的数据用16位字符保存,所以定义的大小为源字符串一半
        byte[] inputByteArray = new byte[DecryptText.Length / 2];

        //将解密内容转换为32位整数,然后存储在二进制数组里
        for (int x = 0; x < DecryptText.Length / 2; x++)
        {
            int i = (Convert.ToInt32(DecryptText.Substring(x * 2, 2), 16));
            inputByteArray[x] = (byte)i;
        }

        //设置秘钥和初始化向量
        des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
        des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
        //用来存储解密内容的内存流
        MemoryStream ms = new MemoryStream();

        //加密转换流
        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);

        //转换后写入数据
        cs.Write(inputByteArray, 0, inputByteArray.Length);

        //更新存储,清理缓存
        cs.FlushFinalBlock();
        StringBuilder ret = new StringBuilder();

        return System.Text.Encoding.UTF8.GetString(ms.ToArray());
    }