C# 加解密算法
2016-03-18 15:39
176 查看
算法介绍
3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1(EK2(Dk3(C)))
DES加解密
key 是八位长的字符串
#region Des 加解密 public static string DesEncrypt(string encryptStr, string key) { try { var inputArry = Encoding.Default.GetBytes(encryptStr); var byKey = Encoding.ASCII.GetBytes(key); var byIv = Encoding.ASCII.GetBytes(key); var ms = new MemoryStream(); using (var cryptoProvider = new DESCryptoServiceProvider()) { using (var cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIv), CryptoStreamMode.Write)) { cs.Write(inputArry, 0, inputArry.Length); cs.FlushFinalBlock(); cs.Close(); } } var str = Convert.ToBase64String(ms.ToArray()); ms.Close(); return str; } catch (Exception) { return encryptStr; } } public static string DesDecrypt(string decryptStr, string key) { try { var inputArry = Convert.FromBase64String(decryptStr); var byKey = Encoding.Default.GetBytes(key); var byIv = Encoding.Default.GetBytes(key); var ms = new MemoryStream(); using (var cryptProvider = new DESCryptoServiceProvider()) { using (var cs = new CryptoStream(ms, cryptProvider.CreateDecryptor(byKey, byIv), CryptoStreamMode.Write)) { cs.Write(inputArry, 0, inputArry.Length); cs.FlushFinalBlock(); cs.Close(); } } var str = Encoding.Default.GetString(ms.ToArray()); ms.Close(); return str; } catch (Exception) { return decryptStr; } } #endregion
3Des加解密
#region 3DES 加解密 public static string Encrypt3Des(string encryStr, string key) { try { var inputArry = Encoding.Default.GetBytes(encryStr); var hashmd5 = new MD5CryptoServiceProvider(); var byKey = hashmd5.ComputeHash(Encoding.Default.GetBytes(key)); var byIv = byKey; var ms = new MemoryStream(); using (var tDescryptProvider = new TripleDESCryptoServiceProvider()) { tDescryptProvider.Mode = CipherMode.ECB; using (var cs = new CryptoStream(ms, tDescryptProvider.CreateEncryptor(byKey, byIv), CryptoStreamMode.Write)) { cs.Write(inputArry, 0, inputArry.Length); cs.FlushFinalBlock(); cs.Close(); } } var str = Convert.ToBase64String(ms.ToArray()); ms.Close(); return str; } catch (Exception) { return encryStr; } } public static string Decrypt3Des(string decryStr, string key) { try { var inputArry = Convert.FromBase64String(decryStr); var hashmd5 = new MD5CryptoServiceProvider(); var byKey = hashmd5.ComputeHash(Encoding.Default.GetBytes(key)); var byIv = byKey; var ms = new MemoryStream(); using (var tDescryptProvider = new TripleDESCryptoServiceProvider()) { tDescryptProvider.Mode = CipherMode.ECB; using (var cs = new CryptoStream(ms, tDescryptProvider.CreateDecryptor(byKey, byIv), CryptoStreamMode.Write)) { cs.Write(inputArry, 0, inputArry.Length); cs.FlushFinalBlock(); cs.Close(); } } var str = Encoding.Default.GetString(ms.ToArray()); ms.Close(); return str; } catch (Exception) { return decryStr; } } #endregion
相关文章推荐
- C# 解析XML
- 详解C#中的反射
- C# FTP上传文件及文件夹至服务器代码
- (原)浅谈C# runat="server"(新手值得注意)
- C# 把DataGridView控件数据,转成DataTable
- c# 浮点型Decimal处理
- C#集合
- C# ListView用法详解
- 怎样在C#代码的运行中,弹出confirm窗口,然后得到确认的值,然后再向下继续执行其他代码?
- 用C#执行批处理并输出结果
- C#判断三个点是否构成三角形和某个点是否在三角形内
- C#判断一个点是否在三角形内?
- C# 线程计时器
- 判断一个点是否在多边形内C#
- C#中timer类
- C#可扩展编程之MEF学习
- 5天玩转C#并行和多线程编程
- C# - 重定义一个接口的实现
- C# - 自定义 DataSet 的使用
- C# - ADO.Net 调用存储过程