美文网首页
Des 对称可逆加密

Des 对称可逆加密

作者: 敏徕 | 来源:发表于2019-08-23 16:08 被阅读0次
    • 对称加密的思路非常简单,就是含有一个称为密钥的东西,在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥进行解密。

    • 根据密钥来产生加密后的消息(密文)的这一加工过程,由加密算法来完成,加密算法通常是公开的。它的流程如下:
      1.发送方使用密钥对消息进行加密。
      2.接收方使用同样的密钥对消息进行解密。

    • 对称加密存在这样两个问题:
      1.虽然可以通过密钥来保证消息安全地进行传递,但是如何确保密钥安全地进行传递?因为发送者和接收者总有一次初始的通信,用来传递密钥,此时的安全如何保证?
      2.接收者虽然可以根据密钥来解密消息,但因为存在上面的问题,消息有可能是由第三方(非法获得密钥)发来的,而接收方无法辨别。

    优点:速度快
    缺点:密钥管理不方便,要求共享密钥(有致命风险)。
    密钥长度:8
        /// <summary>
        /// DES AES Blowfish
        ///  对称加密算法的优点是速度快,
        ///  缺点是密钥管理不方便,要求共享密钥。
        ///  可逆对称加密  密钥长度8
        /// </summary>
        public class DesEncrypt
        {
            private static byte[] _rgbKey = ASCIIEncoding.ASCII.GetBytes(Constant.DesKey.Substring(0, 8));
            private static byte[] _rgbIV = ASCIIEncoding.ASCII.GetBytes(Constant.DesKey.Insert(0, "w").Substring(0, 8));
    
            /// <summary>
            /// DES 加密
            /// </summary>
            /// <param name="text">需要加密的值</param>
            /// <returns>加密后的结果</returns>
            public static string Encrypt(string text)
            {
                DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
                using (MemoryStream memStream = new MemoryStream())
                {
                    CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);
                    StreamWriter sWriter = new StreamWriter(crypStream);
                    sWriter.Write(text);
                    sWriter.Flush();
                    crypStream.FlushFinalBlock();
                    memStream.Flush();
                    return Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length);
                }
            }
    
            /// <summary>
            /// DES解密
            /// </summary>
            /// <param name="encryptText"></param>
            /// <returns>解密后的结果</returns>
            public static string Decrypt(string encryptText)
            {
                DESCryptoServiceProvider dsp = new DESCryptoServiceProvider();
                byte[] buffer = Convert.FromBase64String(encryptText);
    
                using (MemoryStream memStream = new MemoryStream())
                {
                    CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write);
                    crypStream.Write(buffer, 0, buffer.Length);
                    crypStream.FlushFinalBlock();
                    return ASCIIEncoding.UTF8.GetString(memStream.ToArray());
                }
            }
        }
    
        public static class Constant
        {
            public static string DesKey = AppSettings("DesKey", "ruanmou1");
    
    
            private static T AppSettings<T>(string key, T defaultValue)
            {
                var v = ConfigurationManager.AppSettings[key];
                return String.IsNullOrEmpty(v) ? defaultValue : (T)Convert.ChangeType(v, typeof(T));
            }
    
        }
    

    相关文章

      网友评论

          本文标题:Des 对称可逆加密

          本文链接:https://www.haomeiwen.com/subject/lnjtectx.html