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;
                }
            }
        }
  • 相关阅读:
    PHP底层工作原理
    php WebSocket 简单实现demo
    php部署调优
    php简单随机实现发红包程序
    在Android中调用USB摄像头
    在addroutes后,$router.options.routes没有更新的问题(手摸手,带你用vue撸后台 读后感)
    Vue+elementUI开发中 Cannot read property 'resetFields' of undefined 问题解决以及原因分析
    如何在debug vue-cli建立的项目
    在Node.js使用Promise的方式操作Mysql(续)
    express框架中如何只执行一次res响应操作
  • 原文地址:https://www.cnblogs.com/huage-1234/p/9262085.html
Copyright © 2011-2022 走看看