• 对称加密解密类c#


    namespace EncryptDLL
    {
       
    #region 对称加密类
       
    /// <summary>
       
    /// 对称加密解密类
       
    /// </summary>
        public static class SymmetricEncryptClass
        {
           
    #region 对称加密代码
           
    /// <summary>
           
    /// 对称加密方法
           
    /// </summary>
           
    /// <param name="strMsg">要加密的数据</param>
           
    /// <param name="key">加密Key</param>
           
    /// <param name="IV">加密向量</param>
           
    /// <returns>返回加密后的数据,类型byte[]</returns>
            public static byte[] SymmetricEncrptFunction(this string strMsg, string key, string IV)
            {
                TripleDESCryptoServiceProvider tdes
    = new TripleDESCryptoServiceProvider();
                SHA1 sha1
    = new SHA1CryptoServiceProvider();
               
    //初始密钥的设定
                string strNamePlusBirthday = key + IV;
               
    string strKey = new string(strNamePlusBirthday.Reverse().ToArray());
               
    if (sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).Length > tdes.Key.Length)
                {
                    tdes.Key
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).ToString().Substring(0, tdes.Key.Length));
                }
               
    else if (sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).Length < tdes.Key.Length)
                {
                    tdes.Key
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).ToString().PadRight(tdes.Key.Length, ' '));
                }
               
    //初始向量的设定

               
    if (sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).Length > tdes.IV.Length)
                {
                    tdes.IV
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).ToString().Substring(0, tdes.IV.Length));
                }
               
    else if (sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).Length < tdes.IV.Length)
                {
                    tdes.IV
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).ToString().PadRight(tdes.IV.Length, ' '));
                }
               
    byte[] encryptBuffer = Encoding.Default.GetBytes(strMsg);
                MemoryStream streamMemory
    = new MemoryStream();
                CryptoStream cryStream
    = null;//加密流
                byte[] readBuffer;//用来接受加密数据
                try
                {
                    cryStream
    = new CryptoStream(streamMemory, new TripleDESCryptoServiceProvider().CreateEncryptor(tdes.Key, tdes.IV), CryptoStreamMode.Write);
                    cryStream.Write(encryptBuffer,
    0, encryptBuffer.Length);
                    cryStream.FlushFinalBlock();
                }
               
    catch
                {
                   
    return null;
                }
               
    finally
                {
                    readBuffer
    = streamMemory.ToArray();
                    cryStream.Close();
                    streamMemory.Close();
                }
               
    return readBuffer;
            }

           
    #endregion
           
    #region 对称解密代码
           
    /// <summary>
           
    /// 对称解密方法
           
    /// </summary>
           
    /// <param name="bufMsg">需要解密的数据</param>
           
    /// <param name="key">解密Key</param>
           
    /// <param name="IV">解密向量</param>
           
    /// <returns>解密后的数据</returns>
            public static string SymmetricDecryptionFunction(this byte[] bufMsg, string key, string IV)
            {
                TripleDESCryptoServiceProvider tdes
    = new TripleDESCryptoServiceProvider();
                SHA1 sha1
    = new SHA1CryptoServiceProvider();
               
    //初始密钥的设定
                string strNamePlusBirthday = key + IV;
               
    string strKey = new string(strNamePlusBirthday.Reverse().ToArray());
               
    if (sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).Length > tdes.Key.Length)
                {
                    tdes.Key
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).ToString().Substring(0, tdes.Key.Length));
                }
               
    else if (sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).Length < tdes.Key.Length)
                {
                    tdes.Key
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strKey)).ToString().PadRight(tdes.Key.Length, ' '));
                }
               
    //初始向量的设定
                if (sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).Length > tdes.IV.Length)
                {
                    tdes.IV
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).ToString().Substring(0, tdes.IV.Length));
                }
               
    else if (sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).Length < tdes.IV.Length)
                {
                    tdes.IV
    = Encoding.Default.GetBytes(sha1.ComputeHash(Encoding.Default.GetBytes(strNamePlusBirthday)).ToString().PadRight(tdes.IV.Length, ' '));
                }
               
    byte[] readBuffer = bufMsg;
                MemoryStream streamRead
    = new MemoryStream(readBuffer);
                CryptoStream deCryStream
    = null;
               
    byte[] bufferReader;
               
    try
                {
                    deCryStream
    = new CryptoStream(streamRead, new TripleDESCryptoServiceProvider().CreateDecryptor(tdes.Key, tdes.IV), CryptoStreamMode.Read);
                    bufferReader
    = new byte[readBuffer.Length];
                    deCryStream.Read(bufferReader,
    0, bufferReader.Length);
                }
               
    finally
                {
                    deCryStream.Close();
                    streamRead.Close();
                }
               
    string deCryString = Encoding.Default.GetString(bufferReader);
               
    return deCryString;
            }
           
    #endregion
        }
       
    #endregion
    }

  • 相关阅读:
    angularjs: ng-select和ng-options
    angularjs之$timeout指令
    angular的uiRouter服务学习(5) --- $state.includes()方法
    深究AngularJS——如何获取input的焦点(自定义指令)
    深究AngularJS——自定义服务详解(factory、service、provider)
    AngularJS 事件指令/input相关指令/样式指令/DOM操作指令详解
    字符串对象的创建
    redis安装和配置
    Cent Linux启动tomcat慢的问题
    Linux环境nginx的配置
  • 原文地址:https://www.cnblogs.com/jhabb/p/1925495.html
Copyright © 2020-2023  润新知