C#各种加密算法的研究
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.IO;namespace test_CryptoGraphy {class Program{/// <summary>/// MD5 加密静态方法/// </summary>/// <param name="EncryptString">待加密的明文</param>/// <returns>加密后的密文</returns>public static string MD5Encrypt(string EncryptString){if (string.IsNullOrEmpty(EncryptString)){throw(new Exception("明文不得为空!"));}MD5 m_ClassMD5 = new MD5CryptoServiceProvider();string m_strEncrypt = "";try{m_strEncrypt = BitConverter.ToString(m_ClassMD5.ComputeHash(Encoding.Default.GetBytes(EncryptString))).Replace("-","");}catch (ArgumentException ex){throw ex;}catch (CryptographicException ex){throw ex;}catch (Exception ex){throw ex;}finally{m_ClassMD5.Clear();}return m_strEncrypt;}/// <summary>/// DES 加密(数据加密标准,速度较快,适用于加密大量数据的场合)/// </summary>/// <param name="EncryptString">待加密的明文</param>/// <param name="EncryptKey">加密的密钥</param>/// <returns>加密后的密文</returns>public static string DESEncrypt(string EncryptString, string EncryptKey){if (string.IsNullOrEmpty(EncryptString)){throw (new Exception("明文不得为空!"));}if (string.IsNullOrEmpty(EncryptKey)){throw (new Exception("密钥不得为空!"));}if (EncryptKey.Length != 8){throw new Exception("密钥必须为8位");}byte[] m_btIV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strEncrypt = "";DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();try{byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey),m_btIV),CryptoStreamMode.Write);m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);m_cstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());m_stream.Close();m_stream.Dispose();m_cstream.Close();m_cstream.Dispose();}catch (IOException ex){throw ex;}catch (ArgumentException ex){throw ex;}catch (CryptographicException ex){throw ex;}catch (Exception ex){throw ex;}finally{m_DESProvider.Clear();}return m_strEncrypt;}/// <summary>/// DES 解密(数据加密标准,速度较快,适用于加密大量数据的场合)/// </summary>/// <param name="DecryptString">待解密的密文</param>/// <param name="DecryptKey">解密的密钥</param>/// <returns>解密后的明文</returns>public static string DESDecrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)){throw (new Exception("密文不得为空!"));}if (string.IsNullOrEmpty(DecryptKey)){throw (new Exception("密钥不得为空!"));}if (DecryptKey.Length != 8){throw new Exception("密钥必须为8位");}byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strDecrypt = "";DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close();m_stream.Dispose();m_cstream.Close();m_cstream.Dispose();}catch (IOException ex){throw ex;}catch (ArgumentException ex){throw ex;}catch (CryptographicException ex){throw ex;}catch (Exception ex){throw ex;}finally{m_DESProvider.Clear();}return m_strDecrypt;}/* /// <summary>/// DES 解密(数据加密标准,速度较快,适用于加密大量数据的场合)/// </summary>/// <param name="DecryptString">待解密的密文</param>/// <param name="DecryptKey">解密的密钥</param>/// <returns>returns</returns>public static string DESDecrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得为空")); }if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); }if (DecryptKey.Length != 8) { throw (new Exception("密钥必须为8位")); }byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strDecrypt = "";DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_DESProvider.Clear(); }return m_strDecrypt;}*//// <summary>/// RC2 加密(用变长密钥对大量数据进行加密)/// </summary>/// <param name="EncryptString">待加密密文</param>/// <param name="EncryptKey">加密密钥</param>/// <returns>returns</returns>public static string RC2Encrypt(string EncryptString, string EncryptKey){if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得为空")); }if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); }if (EncryptKey.Length < 5 || EncryptKey.Length > 16) { throw (new Exception("密钥必须为5-16位")); }string m_strEncrypt = "";byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();try{byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);m_cstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_RC2Provider.Clear(); }return m_strEncrypt;}/// <summary>/// RC2 解密(用变长密钥对大量数据进行加密)/// </summary>/// <param name="DecryptString">待解密密文</param>/// <param name="DecryptKey">解密密钥</param>/// <returns>returns</returns>public static string RC2Decrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得为空")); }if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); }if (DecryptKey.Length < 5 || DecryptKey.Length > 16) { throw (new Exception("密钥必须为5-16位")); }byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strDecrypt = "";RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_RC2Provider.Clear(); }return m_strDecrypt;}/// <summary>/// 3DES 加密(基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高)/// </summary>/// <param name="EncryptString">待加密密文</param>/// <param name="EncryptKey1">密钥一</param>/// <param name="EncryptKey2">密钥二</param>/// <param name="EncryptKey3">密钥三</param>/// <returns>returns</returns>public static string DES3Encrypt(string EncryptString, string EncryptKey1, string EncryptKey2, string EncryptKey3){string m_strEncrypt = "";try{m_strEncrypt = DESEncrypt(EncryptString, EncryptKey3);m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey2);m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey1);}catch (Exception ex) { throw ex; }return m_strEncrypt;}/// <summary>/// 3DES 解密(基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高)/// </summary>/// <param name="DecryptString">待解密密文</param>/// <param name="DecryptKey1">密钥一</param>/// <param name="DecryptKey2">密钥二</param>/// <param name="DecryptKey3">密钥三</param>/// <returns>returns</returns>public static string DES3Decrypt(string DecryptString, string DecryptKey1, string DecryptKey2, string DecryptKey3){string m_strDecrypt = "";try{m_strDecrypt = DESDecrypt(DecryptString, DecryptKey1);m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey2);m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey3);}catch (Exception ex) { throw ex; }return m_strDecrypt;}/// <summary>/// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)/// </summary>/// <param name="EncryptString">待加密密文</param>/// <param name="EncryptKey">加密密钥</param>/// <returns></returns>public static string AESEncrypt(string EncryptString, string EncryptKey){if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得为空")); }if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密钥不得为空")); }string m_strEncrypt = "";byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");Rijndael m_AESProvider = Rijndael.Create();try{byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);m_csstream.Write(m_btEncryptString, 0, m_btEncryptString.Length); m_csstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_csstream.Close(); m_csstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_AESProvider.Clear(); }return m_strEncrypt;}/// <summary>/// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)/// </summary>/// <param name="DecryptString">待解密密文</param>/// <param name="DecryptKey">解密密钥</param>/// <returns></returns>public static string AESDecrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得为空")); }if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密钥不得为空")); }string m_strDecrypt = "";byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");Rijndael m_AESProvider = Rijndael.Create();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_csstream.Write(m_btDecryptString, 0, m_btDecryptString.Length); m_csstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_csstream.Close(); m_csstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_AESProvider.Clear(); }return m_strDecrypt;}static void Main(string[] args){/*Console.WriteLine(MD5Encrypt("test"));//Console.WriteLine(MD5Decrypt(MD5Encrypt("test")));*/string str = DESEncrypt("test", "helloklk");Console.WriteLine(str);Console.WriteLine(str.Length);Console.WriteLine(DESEncrypt("test", "hellokkk").Length);Console.WriteLine(DESDecrypt(str, "helloklk"));Console.ReadLine();/* HashAlgorithm hash = HashAlgorithm.Create();Console.Write("Hash size:");Console.Write(hash.HashSize.ToString() + "bits");Console.WriteLine();byte[] data = { 200, 34, 12, 14, 210, 199, 172, 77, 88, 99 };byte[] hashBytes = hash.ComputeHash(data);Console.Write("Hash:" + BitConverter.ToString(hashBytes));Console.Read();*/}} }
转载于:https://www.cnblogs.com/jeffrey77/archive/2012/10/16/2725973.html
C#各种加密算法的研究相关推荐
- 混沌序列 java,基于Logistic映射混沌加密算法的研究_韩凤英
第7卷第1期长沙航空职业技术学院学报 Vo1.7No .1 2007年3月 CHANGS HA AERO NAUT I CAL VOCATI ONAL AND TECHN I CAL COLLEGE ...
- 计算机密码学思路,密码学中加密算法的研究和实现
密码学是一门古老而深奥的学科,是研究计算机信息加密.解密及其变换的科学,是数学和计算机的交叉学科,也是一门新兴的学科[1].早在四千年前,古埃及人就开始使用密码来保密传递消息.两千多年前,罗马国王Ju ...
- 非对称加密算法之RSA介绍及OpenSSL中RSA常用函数使用举例
RSA算法,在1977年由Ron Rivest.Adi Shamirh和LenAdleman,在美国的麻省理工学院开发完成.这个算法的名字,来源于三位开发者的名字.RSA已经成为公钥数据加密标准. R ...
- python能解密java的_实现Java加密,Python解密的RSA非对称加密算法功能
摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...
- java python rsa加密_实现Java加密,Python解密的RSA非对称加密算法功能
摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...
- 计算机密码学奖,上海交通大学计算机科学与工程系(CSE)
2019年11月,中国密码学会举办2019年会,会上颁发了2019年中国密码学会优秀博士学位论文奖,计算机系2016届博士毕业生孙士锋的学位论文<抗密钥泄露/篡改攻击的非对称密码算法研究> ...
- 计算机加密技术图片,基于Henon映射的图像加密技术
内容介绍 原文档由会员 第二波打卡 发布 基于Henon映射的图像加密技术 1.95万字 53页 包括外文翻译,原创作品,通过查重系统 摘 要 针对关于Henon映射的图像加密算法,现如今已有很多关于 ...
- 如何面对高水平的破解组织 谈暴力破解应对
如何面对高水平的破解组织 谈暴力破解应对 2005-05-09, 11:18 sanit 共享软件是目前世界上软件业比较热门的话题,国内更是如此.成千上万的中国程序员以极大的热情投入到这个领域来,都憧 ...
- 25k~50k,比特大陆招人啦!这次会是你吗?
每周日,区块链大本营人才快报,不见不散 本周新增招聘信息: 比特大陆 区块链测试工程师(25k-50k) 城市:北京 经验:5-10年 学历:本科 职位描述 1.正规高校计算机及相关专业本科以上学历: ...
最新文章
- [转]商业智能在电子商务交易中6大应用分析
- oracle 操作表
- 百度地图与HT for Web结合的GIS网络拓扑应用
- Leetcode12. 整数转罗马数字(C++)
- 思想:CoreMVC是什么(3)
- 解决Silverlight中DataGrid在显示数据时多一空白列
- 深度剖析 | 初学者应该如何学习前端?该怎么学?
- [2018.10.20 T2] 面包
- 微信支付-扫码支付方式在ThinkPHP商城中的使用(第一部分)
- 三分钟零代码实现CAD网页Web快速看图和高科技效果展示
- EditText 去掉下划线,但是不丢失光标
- Android Couldn‘t find meta-data for provider with authority
- 如何提高信息流广告的转化率?
- C# Microsoft.Office.Interop.Word设置Word页脚之添加当前页数
- Excel调用已有数据利用已经录入的项快速的生成下拉列表
- 用Python做兼职是如何挣钱的?
- Spring-boot-email邮件
- 第5章_数据库相关(一)
- 少年,我看你骨骼惊奇,必是练武奇才,将来维护宇宙正义
- VLC android 3.0解码器使用及移植TV项目调研