对称加密和非对称加密!

主要是对称加密和非对称加密两种。可供各位参考:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace EncryptDLL
{
    #region 对称加密类 ///
    /// 对称加密解密类 ///
    public static class SymmetricEncryptClass
    {
        #region 对称加密代码
        /// /// 对称加密方法 /// 
        /// 要加密的数据 
        /// 加密Key ///
        /// 加密向量 ///
        /// 返回加密后的数据,类型byte[]
        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 对称解密代码
        /// 对称解密方法 /// 
        /// 需要解密的数据 /// 
        /// 解密Key ///
        /// 解密向量 /// 
        /// 解密后的数据
        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
}
namespace EncryptDLL
{
    #region 非对称加密类 /// 
    /// 非对称加密类 ///
    public static class AsymmetricEncrytClass
    {
        #region 自动生成公钥、私钥方法
        /// /// 自动生成非对称公钥、私钥 /// 
        /// 返回的公钥 ///
        /// 返回的私钥
        public static void GenerateKey(out string publicKey, out string privateKey) 
        { 
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
            publicKey = rsa.ToXmlString(false);
            privateKey = rsa.ToXmlString(true);
        }
        #endregion
        #region 非对称加密代码
        /// 非对称加密方法 /// 
        /// 要加密的数据 /// 
        /// 加密的公钥 ///
        /// 返回加密后的byte[]数据
        public static byte[] AsymmetricEncryptRSAFunction(this string strMsg, string strPublicKey)
        { 
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
            rsa.FromXmlString(strPublicKey);
            byte[] buffers = Encoding.UTF8.GetBytes(strMsg);
            byte[] encryBuffer; 
            try 
            { 
                encryBuffer = rsa.Encrypt(buffers, false);
            } 
            catch 
            { 
                return null;
            } 
            return encryBuffer;
        }
        #endregion
        #region 非对称解密代码
        /// /// 非对称解密方法 /// 
        /// 需要解密的byte[]类型数据 
        /// 解密的私钥 
        /// 解密后的数据string类型
        public static string AsymmetricDecryptRSAFunction(this byte[] byteMsg, string strPrivateKey) 
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(strPrivateKey);
            byte[] decryptBuffers; 
            try { decryptBuffers = rsa.Decrypt(byteMsg, false); 
            } 
            catch (Exception e)
            { 
                return e.Message;
            } 
            return Encoding.UTF8.GetString(decryptBuffers); 
        }
        #endregion
    }
    #endregion
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对称加密非对称加密是两种常见的加密算法。 对称加密算法使用相同的密钥来进行加密和解密。发送方和接收方需要共享同一个密钥。在对称加密中,加密和解密的过程使用相同的密钥,因此速度较快。然而,对称加密的一个主要问题是密钥的安全性,因为如果密钥被泄露,那么攻击者就可以轻松解密加密的数据。 非对称加密算法使用一对密钥,分别是公钥和私钥。公钥是公开的,可以被任何人使用来加密数据。而私钥是保密的,只有拥有私钥的人才能解密数据。非对称加密算法提供了更高的安全性,因为即使公钥被泄露,攻击者也无法解密数据,只有私钥的持有者才能解密。然而,非对称加密算法的加密和解密过程相对较慢。 因此,对称加密算法适用于需要快速加密和解密的场景,而非对称加密算法适用于需要更高安全性的场景。在实际应用中,通常会将对称加密非对称加密结合使用,例如使用非对称加密算法来安全地传输对称加密算法使用的密钥,以实现更高的安全性和效率。\[1\]\[2\] #### 引用[.reference_title] - *1* [对称加密+非对称加密,实现数据安全传输](https://blog.csdn.net/Aminy123/article/details/81871092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [对称加密非对称加密(一)初步理解](https://blog.csdn.net/zam183/article/details/85270472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值