数据加密方式总结

摘要:
Y6&(*jkP87jH7”;//用户定义的秘密字符串iv=“G4ghj*Ghg7!

1、Base64编解码(最简单的加密方式,但实际只是进行了一个编码而已,严格意义上来说,算不上真正的加密)

  Base64编码:

数据加密方式总结第1张数据加密方式总结第2张
 /// <summary>
        /// Base64编码
        /// </summary>
        /// <param name="code_type">编码类型</param>
        /// <param name="code">待编码的字符串</param>
        /// <returns></returns>
        public static string Base64Encode(string code_type, string code)
        {
            string encode = "";
            byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code);
            try
            {
                encode = Convert.ToBase64String(bytes);
            }
            catch
            {
                encode = code;
            }
            return encode;
        }
View Code

  Base64解码:

数据加密方式总结第3张数据加密方式总结第4张
/// <summary>
        /// Base64解码
        /// </summary>
        /// <param name="code_type">编码类型</param>
        /// <param name="code">带解码的字符串</param>
        /// <returns></returns>
        public static string Base64Decode(string code_type, string code)
        {
            string decode = "";
            byte[] bytes = Convert.FromBase64String(code);
            try
            {
                decode = Encoding.GetEncoding(code_type).GetString(bytes);
            }
            catch
            {
                decode = code;
            }
            return decode;
        }
View Code

2、倒序加1加密解密
  倒序加1加密:

数据加密方式总结第5张数据加密方式总结第6张
 public static string EncryptOrderStr(string data) //倒序加1加密 
        {
            byte[] by = new byte[data.Length];
            for (int i = 0; i <= data.Length - 1; i++)
            {
                by[i] = (byte)((byte)data[i] + 1);
            }
            data = "";
            for (int i = by.Length - 1; i >= 0; i--)
            {
                data += ((char)by[i]).ToString();
            }
            return data;
        }
View Code

  顺序减1解密:

数据加密方式总结第7张数据加密方式总结第8张
 public static string DecryptOrderStr(string data) 
        {
            byte[] by = new byte[data.Length];
            for (int i = 0; i <= data.Length - 1; i++)
            {
                by[i] = (byte)((byte)data[i] - 1);
            }
            data = "";
            for (int i = by.Length - 1; i >= 0; i--)
            {
                data += ((char)by[i]).ToString();
            }
            return data;
        }
View Code

3、MD5加密

数据加密方式总结第9张数据加密方式总结第10张
public static string MD5Encrypt(string paramstr)
        {
            string privateKey = "lovexiaohong";
            string tempStr = FormsAuthentication.HashPasswordForStoringInConfigFile(privateKey, "MD5");

            return FormsAuthentication.HashPasswordForStoringInConfigFile(paramstr + tempStr, "MD5").ToLower();
        }
View Code

4、盐渍MD5哈希加密

数据加密方式总结第11张数据加密方式总结第12张
public static string SaltedHash(string salted, string source)
        {
            if (salted.Length == 0)
            {
                salted = "hehe";
            }
            byte[] Original = Encoding.Default.GetBytes(source);
            byte[] SaltValue = Encoding.Default.GetBytes(salted);
            byte[] ToSalt = new byte[Original.Length + SaltValue.Length];
            Original.CopyTo(ToSalt, 0);
            SaltValue.CopyTo(ToSalt, Original.Length);
            MD5 st = MD5.Create();
            byte[] SaltPWD = st.ComputeHash(ToSalt);
            byte[] PWD = new byte[SaltPWD.Length + SaltValue.Length];
            SaltPWD.CopyTo(PWD, 0);
            SaltValue.CopyTo(PWD, SaltPWD.Length);
            return Convert.ToBase64String(PWD);
        }
View Code

5、对称加密解密(向量)

数据加密方式总结第13张数据加密方式总结第14张
private SymmetricAlgorithm mobjCryptoService;
        private string key;
        private string iv;
        public Encrypt()
        {
            mobjCryptoService = new RijndaelManaged();
            key = "Gu(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";//自定义的密串
            iv = "G4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";//自定义的对称算法向量
        }
        /// <summary>
        /// 获得密钥
        /// </summary>
        /// <returns>密钥</returns>
        private byte[] GetLegalKey()
        {
            string sTemp = key;
            mobjCryptoService.GenerateKey();// 当在派生类中重写时,生成用于该算法的随机密钥
            byte[] bytTemp = mobjCryptoService.Key;
            int KeyLength = bytTemp.Length;
            if (sTemp.Length > KeyLength)
                sTemp = sTemp.Substring(0, KeyLength);
            else if (sTemp.Length < KeyLength)
                sTemp = sTemp.PadRight(KeyLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        /// <summary>
        /// 获得初始向量IV
        /// </summary>
        /// <returns>初试向量IV</returns>
        private byte[] GetLegalIV()
        {
            string sTemp =iv;
            mobjCryptoService.GenerateIV();
            byte[] bytTemp = mobjCryptoService.IV;// 获取或设置对称算法的初始化向量
            int IVLength = bytTemp.Length;//获得一个 32 位整数,表示 System.Array 的所有维数中元素的总数
            if (sTemp.Length > IVLength)
                sTemp = sTemp.Substring(0, IVLength);
            else if (sTemp.Length < IVLength)
                sTemp = sTemp.PadRight(IVLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
View Code

  加密:

数据加密方式总结第15张数据加密方式总结第16张
/// <summary>
        /// 加密方法(先实例化Encrypt类)
        /// </summary>
        /// <param name="Source">待加密的串</param>
        /// <returns>经过加密的串</returns>
        public string EncrypStrByIV(string Source)
        {
            byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
            MemoryStream ms = new MemoryStream();
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
            cs.Write(bytIn, 0, bytIn.Length);
            cs.FlushFinalBlock();
            ms.Close();
            byte[] bytOut = ms.ToArray();
            return Convert.ToBase64String(bytOut);
        }
View Code

  解密:

数据加密方式总结第17张数据加密方式总结第18张
/// <summary>
        /// 解密方法(先实例化Encrypt类)
        /// </summary>
        /// <param name="Source">待解密的串</param>
        /// <returns>经过解密的串</returns>
        public string DecrypStrByIV(string Source)
        {
            byte[] bytIn = Convert.FromBase64String(Source);
            MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
            mobjCryptoService.Key = GetLegalKey();
            mobjCryptoService.IV = GetLegalIV();
            ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cs);
            return sr.ReadToEnd();
        }
View Code

6、DES加密解密
  DES加密:

数据加密方式总结第19张数据加密方式总结第20张
public static string DESEncrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.Default.GetBytes(Text);
            des.Key = ASCIIEncoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "sha1").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "sha1").Substring(0, 8));
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            cs.Close();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            return ret.ToString();
        }
View Code

  DES解密:

数据加密方式总结第21张数据加密方式总结第22张
public static string DESDecrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len;
            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "sha1").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "sha1").Substring(0, 8));
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            cs.Close();
            return Encoding.Default.GetString(ms.ToArray());
        }
View Code

7、TripleDES加密解密
  TripleDES加密:

数据加密方式总结第23张数据加密方式总结第24张
public static string TripleDESEncrypting(string strSource)
        {
            try
            {
                byte[] bytIn = Encoding.Default.GetBytes(strSource);
                byte[] key = { 42, 21, 93, 156, 78, 4, 218, 32, 15, 167, 44, 80, 26, 20, 155, 112, 2, 94, 11, 204, 119, 35, 184, 197 }; //定义密钥
                byte[] IV = { 55, 103, 246, 79, 36, 99, 167, 3 };  //定义偏移量
                TripleDESCryptoServiceProvider TripleDES = new TripleDESCryptoServiceProvider();
                TripleDES.IV = IV;
                TripleDES.Key = key;
                ICryptoTransform encrypto = TripleDES.CreateEncryptor();
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
                cs.Write(bytIn, 0, bytIn.Length);
                cs.FlushFinalBlock();
                byte[] bytOut = ms.ToArray();
                return System.Convert.ToBase64String(bytOut);
            }
            catch (Exception ex)
            {
                throw new Exception("加密时候出现错误!错误提示:\n" + ex.Message);
            }
        }
View Code

  TripleDES解密:

数据加密方式总结第25张数据加密方式总结第26张
public static string TripleDESDecrypting(string Source)
        {
            try
            {
                byte[] bytIn = System.Convert.FromBase64String(Source);
                byte[] key = { 42, 21, 93, 156, 78, 4, 218, 32, 15, 167, 44, 80, 26, 20, 155, 112, 2, 94, 11, 204, 119, 35, 184, 197 }; //定义密钥
                byte[] IV = { 55, 103, 246, 79, 36, 99, 167, 3 };   //定义偏移量
                TripleDESCryptoServiceProvider TripleDES = new TripleDESCryptoServiceProvider();
                TripleDES.IV = IV;
                TripleDES.Key = key;
                ICryptoTransform encrypto = TripleDES.CreateDecryptor();
                MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
                CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
                StreamReader strd = new StreamReader(cs, Encoding.Default);
                return strd.ReadToEnd();
            }
            catch (Exception ex)
            {
                throw new Exception("解密时候出现错误!错误提示:\n" + ex.Message);
            }
        }
View Code


  

免责声明:文章转载自《数据加密方式总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇充放电利器 BYD双向逆变充放电技术解析Oracle中的next_day(date,char)函数的理解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据加密之SymmetricAlgorithm加密

1 #region SymmetricAlgorithm加密 2 /// <summary> 3 /// 按指定对称算法、键和向量加密字符串 4 /// </summary> 5 public static byte[] Encrypt(...

【12c】Oracle 12c Transparent Data Encryption透明数据加密

对于数据库的安全性而言,除了使用用户、权限和角色进行控制外,还可以通过数据加密或者数据掩码来实现,关于透明的数据加密,可以对个别表列或整个表空间进行加密。当用户向加密的列中插入数据时,透明数据加密会自动加密该数据。当用户选择该列时,数据将自动解密。选择完毕后,数据将重新加密。 本篇就Oracle 12c中的透明数据加密进行演示。 1 演示环境 SQL>...

javascript 使用数据加密跟base64 编码

下面的js代码首先将给定的数据字符串,跟指定的密匙字符串做异或运算,接着将结果序列进行base64编码,下面同时给出了解密算法跟,base64还原函数 代码如下: function secode(opArray) {var _local2 = opArray;var strEnd="=";var _local3 = "ABCDEFGHIJKLMNOPQR...

常见的几种数据加密与应用场景

起因 最近被一个同事问到,在网络交互中,那部分数据需要被加密那一部分不需要被加密。我觉得这个问题有点太泛了,所以给他科普了一次常见的数据加密与应用场景的课。突然间觉得这个还挺有教育意义的。所以我还是吧这个记录一下吧。 啊,年轻犯下的错 当初我们给某个建站平台做手机客户端的时候就没有考虑这些事情,现在想想被攻击实在是太简单了。我们当初做的内容其实根本就没有...

数据加密与数据压缩后加密的效率

最近做一个数据库数据的导入导出的工具,在解决了数据导入的自动表排序问题后,客户要求对传输的数据加密和解密 1. 先测试了当前的数据大小变化和加密(RSA)耗费时间:    常规导出的业务数据 在不加密的情况下才采用二进制存储大概300K左右    加密后,采用二进制存储数据膨胀到了8M左右    加密的时间稍微长了一下,正常导出需要几秒钟,现在多了几十秒。...

数据加密之RijndaelManaged加密

1 #region RijndaelManaged加密 2 /// <summary> 3 /// 加密数据 4 /// </summary> 5 /// <param name="Text">要加密的内容</param>...