加密

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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章