C# 加密可逆

现在一直在做一个小软件,公司的通讯录系统,也没什么功能增删改查,这算是我来这个公司实习的第一件事吧。

在修改个人信息的时候一直对于密码显示这个存在矛盾,不知道应该是要哪种形式去做,后来自己就先用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加密的。

posted @ 2014-05-06 09:21  暗暗大人  阅读(1103)  评论(0编辑  收藏  举报