MD5,DES,RSA
Posted shangec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MD5,DES,RSA相关的知识,希望对你有一定的参考价值。
1,MD5
用途:
1 防止明文:加密后保存比较安全,下次加密检验;密码要复杂一点
2 防篡改:文件上传;文件下载防挂马;svn
3 防止抵赖:需要一个第三方认证,数字签名
1 /// <summary> 2 /// 不可逆加密 3 /// 1 防止被篡改 4 /// 2 防止明文存储 5 /// 3 防止抵赖,数字签名 6 /// </summary> 7 public class MD5Encrypt 8 { 9 #region MD5 10 /// <summary> 11 /// MD5加密,和动网上的16/32位MD5加密结果相同, 12 /// 使用的UTF8编码 13 /// </summary> 14 /// <param name="source">待加密字串</param> 15 /// <param name="length">16或32值之一,其它则采用.net默认MD5加密算法</param> 16 /// <returns>加密后的字串</returns> 17 public static string Encrypt(string source, int length = 32)//默认参数 18 { 19 if (string.IsNullOrEmpty(source)) return string.Empty; 20 HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm; 21 byte[] bytes = Encoding.UTF8.GetBytes(source);//这里需要区别编码的 22 byte[] hashValue = provider.ComputeHash(bytes); 23 StringBuilder sb = new StringBuilder(); 24 switch (length) 25 { 26 case 16://16位密文是32位密文的9到24位字符 27 for (int i = 4; i < 12; i++) 28 { 29 sb.Append(hashValue[i].ToString("x2")); 30 } 31 break; 32 case 32: 33 for (int i = 0; i < 16; i++) 34 { 35 sb.Append(hashValue[i].ToString("x2")); 36 } 37 break; 38 default: 39 for (int i = 0; i < hashValue.Length; i++) 40 { 41 sb.Append(hashValue[i].ToString("x2")); 42 } 43 break; 44 } 45 return sb.ToString(); 46 } 47 #endregion MD5 48 49 #region MD5摘要 50 /// <summary> 51 /// 获取文件的MD5摘要 52 /// </summary> 53 /// <param name="fileName"></param> 54 /// <returns></returns> 55 public static string AbstractFile(string fileName) 56 { 57 FileStream file = new FileStream(fileName, FileMode.Open); 58 MD5 md5 = new MD5CryptoServiceProvider(); 59 byte[] retVal = md5.ComputeHash(file); 60 file.Close(); 61 62 StringBuilder sb = new StringBuilder(); 63 for (int i = 0; i < retVal.Length; i++) 64 { 65 sb.Append(retVal[i].ToString("x2")); 66 } 67 return sb.ToString(); 68 } 69 #endregion 70 }
2,DES
可逆对称加密
1 /// <summary> 2 /// DES AES Blowfish 3 /// 对称加密算法的优点是速度快, 4 /// 缺点是密钥管理不方便,要求共享密钥。 5 /// 可逆对称加密 密钥长度8 6 /// </summary> 7 public class DesEncrypt 8 { 9 private static byte[] _rgbKey = ASCIIEncoding.ASCII.GetBytes(Constant.DesKey.Substring(0, 8)); 10 private static byte[] _rgbIV = ASCIIEncoding.ASCII.GetBytes(Constant.DesKey.Insert(0, "w").Substring(0, 8)); 11 12 /// <summary> 13 /// DES 加密 14 /// </summary> 15 /// <param name="text">需要加密的值</param> 16 /// <returns>加密后的结果</returns> 17 public static string Encrypt(string text) 18 { 19 DESCryptoServiceProvider dsp = new DESCryptoServiceProvider(); 20 using (MemoryStream memStream = new MemoryStream()) 21 { 22 CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write); 23 StreamWriter sWriter = new StreamWriter(crypStream); 24 sWriter.Write(text); 25 sWriter.Flush(); 26 crypStream.FlushFinalBlock(); 27 memStream.Flush(); 28 return Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length); 29 } 30 } 31 32 /// <summary> 33 /// DES解密 34 /// </summary> 35 /// <param name="encryptText"></param> 36 /// <returns>解密后的结果</returns> 37 public static string Decrypt(string encryptText) 38 { 39 DESCryptoServiceProvider dsp = new DESCryptoServiceProvider(); 40 byte[] buffer = Convert.FromBase64String(encryptText); 41 42 using (MemoryStream memStream = new MemoryStream()) 43 { 44 CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(_rgbKey, _rgbIV), CryptoStreamMode.Write); 45 crypStream.Write(buffer, 0, buffer.Length); 46 crypStream.FlushFinalBlock(); 47 return ASCIIEncoding.UTF8.GetString(memStream.ToArray()); 48 } 49 } 50 } 51 52 53 public static class Constant 54 { 55 public static string DesKey = AppSettings("DesKey", "ruanmou1"); 56 57 private static T AppSettings<T>(string key, T defaultValue) 58 { 59 var v = ConfigurationManager.AppSettings[key]; 60 return String.IsNullOrEmpty(v) ? defaultValue : (T)Convert.ChangeType(v, typeof(T)); 61 } 62 } 63 64 65 //app.config 66 <?xml version="1.0" encoding="utf-8" ?> 67 <configuration> 68 <startup> 69 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 70 </startup> 71 <appSettings> 72 <add key="DesKey" value="eleven11"/> 73 </appSettings> 74 </configuration>
3,RSA
可逆非对称加密
加密钥 解密钥 钥匙的功能划分
公钥 私钥 公开程度划分
加密钥公开,解密钥揣兜里,有什么作用呢? 保证内容只有我看得到,防止外传
解密钥公开,加密钥揣兜里,有什么作用呢? 保证数据不能篡改,一定来自于我
1 /// <summary> 2 /// RSA ECC 3 /// 可逆非对称加密 4 /// 非对称加密算法的优点是密钥管理很方便,缺点是速度慢。 5 /// </summary> 6 public class RsaEncrypt 7 { 8 9 /// <summary> 10 /// 获取加密/解密对 11 /// Encrypt Decrypt 12 /// </summary> 13 /// <returns>Encrypt Decrypt</returns> 14 public static KeyValuePair<string, string> GetKeyPair() 15 { 16 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 17 string publicKey = RSA.ToXmlString(false); 18 string privateKey = RSA.ToXmlString(true); 19 return new KeyValuePair<string, string>(publicKey, privateKey); 20 } 21 22 /// <summary> 23 /// 加密:内容+加密key 24 /// </summary> 25 /// <param name="content"></param> 26 /// <param name="encryptKey">加密key</param> 27 /// <returns></returns> 28 public static string Encrypt(string content, string encryptKey) 29 { 30 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 31 rsa.FromXmlString(encryptKey); 32 UnicodeEncoding ByteConverter = new UnicodeEncoding(); 33 byte[] DataToEncrypt = ByteConverter.GetBytes(content); 34 byte[] resultBytes = rsa.Encrypt(DataToEncrypt, false); 35 return Convert.ToBase64String(resultBytes); 36 } 37 38 /// <summary> 39 /// 解密 内容+解密key 40 /// </summary> 41 /// <param name="content"></param> 42 /// <param name="decryptKey">解密key</param> 43 /// <returns></returns> 44 public static string Decrypt(string content, string decryptKey) 45 { 46 byte[] dataToDecrypt = Convert.FromBase64String(content); 47 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 48 RSA.FromXmlString(decryptKey); 49 byte[] resultBytes = RSA.Decrypt(dataToDecrypt, false); 50 UnicodeEncoding ByteConverter = new UnicodeEncoding(); 51 return ByteConverter.GetString(resultBytes); 52 } 53 54 55 /// <summary> 56 /// 可以合并在一起的,,每次产生一组新的密钥 57 /// </summary> 58 /// <param name="content"></param> 59 /// <param name="encryptKey">加密key</param> 60 /// <param name="decryptKey">解密key</param> 61 /// <returns>加密后结果</returns> 62 private static string Encrypt(string content, out string publicKey, out string privateKey) 63 { 64 RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(); 65 publicKey = rsaProvider.ToXmlString(false); 66 privateKey = rsaProvider.ToXmlString(true); 67 68 UnicodeEncoding ByteConverter = new UnicodeEncoding(); 69 byte[] DataToEncrypt = ByteConverter.GetBytes(content); 70 byte[] resultBytes = rsaProvider.Encrypt(DataToEncrypt, false); 71 return Convert.ToBase64String(resultBytes); 72 } 73 }
4,CA
5,单边认证
6,双边认证
以上是关于MD5,DES,RSA的主要内容,如果未能解决你的问题,请参考以下文章
MD5 不可逆加密,Des对称可逆加密 ,RSA非对称可逆加密 ,数字证书 SSL