现在一直在做一个小软件,公司的通讯录系统,也没什么功能增删改查,这算是我来这个公司实习的第一件事吧。
在修改个人信息的时候一直对于密码显示这个存在矛盾,不知道应该是要哪种形式去做,后来自己就先用md5加密的那种,做好了之后感觉不是很好,就是在去数据库密码的时候取不了,感觉特烦,后来在网上找了个可逆的加密,感觉好挺好用的。 先分享分享。
建一个类Encrypt保存加密解密的那些步骤。
1 private SymmetricAlgorithm mobjCryptoService; 2 private string Key; 3 4 public Encrypt() 5 { 6 // 7 //TODO: 在此处添加构造函数逻辑 8 // 9 mobjCryptoService = new RijndaelManaged(); 10 Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; 11 } 12 /// <summary> 13 /// 获得密钥 14 /// </summary> 15 /// <returns>密钥</returns> 16 private byte[] GetLegalKey() 17 { 18 string sTemp = Key; 19 mobjCryptoService.GenerateKey(); 20 byte[] bytTemp = mobjCryptoService.Key; 21 int KeyLength = bytTemp.Length; 22 23 if (sTemp.Length > KeyLength) 24 sTemp = sTemp.Substring(0, KeyLength); 25 else if (sTemp.Length < KeyLength) 26 sTemp = sTemp.PadRight(KeyLength, ' '); 27 return ASCIIEncoding.ASCII.GetBytes(sTemp); 28 } 29 /// <summary> 30 /// 获得初始向量 IV 31 /// </summary> 32 /// <returns>初试向量IV</returns> 33 private byte[] GetLegalIV() 34 { 35 string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; 36 mobjCryptoService.GenerateIV(); 37 byte[] bytTemp = mobjCryptoService.IV; 38 int IVLength = bytTemp.Length; 39 if (sTemp.Length > IVLength) 40 sTemp = sTemp.Substring(0, IVLength); 41 else if (sTemp.Length < IVLength) 42 sTemp = sTemp.PadRight(IVLength, ' '); 43 return ASCIIEncoding.ASCII.GetBytes(sTemp); 44 } 45 /// <summary> 46 /// 加密方法 47 /// </summary> 48 /// <param name="Source">待加密的串</param> 49 /// <returns>经过加密的串</returns> 50 public string Encrypto(string Source) 51 { 52 byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); 53 MemoryStream ms = new MemoryStream(); 54 mobjCryptoService.Key = GetLegalKey(); 55 mobjCryptoService.IV = GetLegalIV(); 56 ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); 57 CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); 58 cs.Write(bytIn, 0, bytIn.Length); 59 cs.FlushFinalBlock(); 60 ms.Close(); 61 byte[] bytOut = ms.ToArray(); 62 return Convert.ToBase64String(bytOut); 63 } 64 /// <summary> 65 /// 解密方法 66 /// </summary> 67 /// <param name="Source">待解密的串</param> 68 /// <returns>经过解密的串</returns> 69 public string Decrypto(string Source) 70 { 71 byte[] bytIn = Convert.FromBase64String(Source); 72 MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); 73 mobjCryptoService.Key = GetLegalKey(); 74 mobjCryptoService.IV = GetLegalIV(); 75 ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); 76 CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); 77 StreamReader sr = new StreamReader(cs); 78 return sr.ReadToEnd(); 79 }
转自:http://www.knowsky.com/442584.html
最后那个修改密码的,我就问主管应该怎么去显示,然后竟然得到的答案就是 ”为什么要去显示呢?“,好吧我承认我还小,最后我还是改回来了md5加密的。