zoukankan      html  css  js  c++  java
  • AES && DES加解密

    MD5加密一般不可逆,只能暴力突破。所以这边记录一下一些关于字符串的加解密的两种方法,以便自己学习

    AES

       public class AESHelper
        {
            public static string AESEncrypt(string text)
            {
                return AESEnc(text, KeyStruct.strKey);
            }
    
            public static string AESDecrypt(string text)
            {
                return AESDes(text, KeyStruct.strKey);
            }
            //加密
            private static string AESEnc(string text, string mkey)
            {
                using (RijndaelManaged rijndael = new RijndaelManaged())
                {
                    rijndael.Mode = CipherMode.ECB;
                    rijndael.Padding = PaddingMode.PKCS7;
                    rijndael.KeySize = 128;
                    rijndael.BlockSize = 128;
                    byte[] pwdBytes = Encoding.Default.GetBytes(mkey);
                    byte[] keyBytes = new byte[16];
                    int len = pwdBytes.Length > keyBytes.Length ? keyBytes.Length : pwdBytes.Length;
                    Array.Copy(pwdBytes, keyBytes, len);
                    rijndael.Key = keyBytes;
                    using (ICryptoTransform tranform = rijndael.CreateEncryptor())
                    {
                        byte[] txtBytes = Encoding.Default.GetBytes(text);                 
                        return Convert.ToBase64String(tranform.TransformFinalBlock(txtBytes, 0, txtBytes.Length));
                    }
                }          
            }
            //解密
            private static string AESDes(string text, string key)
            {
                using (RijndaelManaged rijndael = new RijndaelManaged())
                {
                    rijndael.Mode = CipherMode.ECB;
                    rijndael.Padding = PaddingMode.PKCS7;
                    rijndael.KeySize = 128;
                    rijndael.BlockSize = 128;
                    byte[] encryptedData = Convert.FromBase64String(text);
                    byte[] pwdBytes = Encoding.Default.GetBytes(key);
                    byte[] keyBytes = new byte[16];
                    int len = pwdBytes.Length > keyBytes.Length ? keyBytes.Length : pwdBytes.Length;
                    Array.Copy(pwdBytes, keyBytes, len);
                    rijndael.Key = keyBytes;
                    using (ICryptoTransform tranform = rijndael.CreateDecryptor())
                    {
                        var a = tranform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
                        return Encoding.Default.GetString(a);
                    }
                }   
            }
    
            private  struct KeyStruct
            {
                public static string strKey = "****";
            }
        }

    DES

    public class DesHelper
        {
            private static string desKey = "****";
            public static string DesEncrypt(string text)
            {
                return DesEnc(text, desKey);
            }
            public static string DesDescript(string text)
            {
                return DesDes(text, desKey);
            }
            private static string DesEnc(string text, string dkey)
            {
                using (DESCryptoServiceProvider descry = new DESCryptoServiceProvider())
                {
                    byte[] txtBytes = Encoding.Default.GetBytes(text);
                    byte[] keyBytes =ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.
                        HashPasswordForStoringInConfigFile(dkey, "MD5").Substring(0, 8));              
                    descry.Key = keyBytes;
                    descry.IV = keyBytes;  //获取或设置对称算法的初始化向量,这边默认向量为key
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, descry.CreateEncryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(txtBytes, 0, txtBytes.Length);
                            cs.FlushFinalBlock();
                        }
                        //StringBuilder ret = new StringBuilder();
                        //foreach (byte b in ms.ToArray())
                        //{
                        //    ret.AppendFormat("{0:X2}", b);
                        //}
                        return Convert.ToBase64String(ms.ToArray());
                    }
                }
            }
    
            private static string DesDes(string text, string dkey)
            {
                try
                {
                    using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                    {
                        byte[] txtBytes = Convert.FromBase64String(text);
                        des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.
                                 HashPasswordForStoringInConfigFile(dkey, "MD5").Substring(0, 8));
                        des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.
                              HashPasswordForStoringInConfigFile(dkey, "MD5").Substring(0, 8));
                        using (MemoryStream ms = new MemoryStream())
                        {
                            using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                            {
                                cs.Write(txtBytes, 0, txtBytes.Length);
                                cs.FlushFinalBlock();
                                return Encoding.Default.GetString(ms.ToArray());
                            }
                        }
                    }
                }
                catch (Exception ex)
                {                
                    throw ex;
                }
            }
        }
  • 相关阅读:
    【Qt】无边框窗体中带有ActiveX组件时的一个BUG
    Qt:正确判断文件、文件夹是否存在的方法
    自定义Data Service Providers
    Facebook的ATOM Editor的底层Electron
    ASP.NET Web API中使用OData
    Oracle 使用
    ODP.NET 之访问 Oracle 数据库
    Oracle安装及使用入门
    架构设计
    CQRS模式实现
  • 原文地址:https://www.cnblogs.com/huage-1234/p/9262085.html
Copyright © 2011-2022 走看看