加密

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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值