0%

C#加密算法总结 - WeihanLi - 博客园

Excerpt

1.MD5加密
2.AES加密
3.SHA1加密
4.SHA256加密
5.SHA384加密
6.SHA512加密
7.DES加密
8.加密方法封装


C#加密算法总结

MD5加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> MD5加密
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="strPwd"&gt;</span><span>原字符串</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;returns&gt;</span><span>加密后字符串</span><span>&lt;/returns&gt;</span>
<span> 6</span> <span>public</span> <span>static</span> <span>string</span> GetMD5(<span>string</span><span> strPwd)
</span><span> 7</span> <span> {
</span><span> 8</span> <span>//</span><span>MD5 对象创建的两种方式
</span><span> 9</span> <span>//</span><span>MD5 md5 = MD5.Create();</span>
<span>10</span> MD5 md5 = <span>new</span><span> MD5CryptoServiceProvider();
</span><span>11</span> <span>//</span><span>将输入的密码转换成字节数组</span>
<span>12</span> <span>byte</span>[] bPwd =<span> Encoding.UTF8.GetBytes(strPwd);
</span><span>13</span> <span>//</span><span>计算指定字节数组的哈希值</span>
<span>14</span> <span>byte</span>[] bMD5 =<span> md5.ComputeHash(bPwd);
</span><span>15</span> <span>//</span><span>释放加密服务提供类的所有资源</span>
<span>16</span> <span> md5.Clear();
</span><span>17</span> StringBuilder sbMD5Pwd = <span>new</span><span> StringBuilder();
</span><span>18</span> <span>for</span> (<span>int</span> i = <span>0</span>; i &lt; bMD5.Length; i++<span>)
</span><span>19</span> <span> {
</span><span>20</span> <span>//</span><span>将每个字节数据转换为2位的16进制的字符</span>
<span>21</span> sbMD5Pwd.Append(bMD5[i].ToString(<span>"</span><span>x2</span><span>"</span><span>));
</span><span>22</span> <span> }
</span><span>23</span> <span>return</span><span> sbMD5Pwd.ToString();
</span><span>24</span> }

SHA1加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> 使用 SHA1 加密算法来加密
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="sourceString"&gt;</span><span>原字符串</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;returns&gt;</span><span>加密后字符串</span><span>&lt;/returns&gt;</span>
<span> 6</span> <span>public</span> <span>static</span> <span>string</span> SHA1_Encrypt(<span>string</span><span> sourceString)
</span><span> 7</span> <span> {
</span><span> 8</span> <span>byte</span>[] StrRes =<span> Encoding.UTF8.GetBytes(sourceString);
</span><span> 9</span> HashAlgorithm iSHA = <span>new</span><span> SHA1CryptoServiceProvider();
</span><span>10</span> StrRes =<span> iSHA.ComputeHash(StrRes);
</span><span>11</span> StringBuilder EnText = <span>new</span><span> StringBuilder();
</span><span>12</span> <span>foreach</span> (<span>byte</span> iByte <span>in</span><span> StrRes)
</span><span>13</span> <span> {
</span><span>14</span> EnText.AppendFormat(<span>"</span><span>{0:x2}</span><span>"</span><span>, iByte);
</span><span>15</span> <span> }
</span><span>16</span> <span>return</span><span> EnText.ToString();
</span><span>17</span> }

SHA256加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> SHA256 加密
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="sourceString"&gt;</span><span>原字符串</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;returns&gt;</span><span>加密后字符串</span><span>&lt;/returns&gt;</span>
<span> 6</span> <span>public</span> <span>static</span> <span>string</span> SHA256_Encrypt(<span>string</span><span> sourceString)
</span><span> 7</span> <span> {
</span><span> 8</span> <span>byte</span>[] data =<span> Encoding.UTF8.GetBytes(sourceString);
</span><span> 9</span> SHA256 shaM =<span> SHA256.Create();
</span><span>10</span> <span>byte</span>[] result =<span> shaM.ComputeHash(data);
</span><span>11</span> StringBuilder EnText = <span>new</span><span> StringBuilder();
</span><span>12</span> <span>foreach</span> (<span>byte</span> iByte <span>in</span><span> result)
</span><span>13</span> <span> {
</span><span>14</span> EnText.AppendFormat(<span>"</span><span>{0:x2}</span><span>"</span><span>, iByte);
</span><span>15</span> <span> }
</span><span>16</span> <span>return</span><span> EnText.ToString();
</span><span>17</span> }

SHA384加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> SHA384 加密
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="sourceString"&gt;</span><span>原字符串</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;returns&gt;</span><span>加密后字符串</span><span>&lt;/returns&gt;</span>
<span> 6</span> <span>public</span> <span>static</span> <span>string</span> SHA384_Encrypt(<span>string</span><span> sourceString)
</span><span> 7</span> <span> {
</span><span> 8</span> <span>byte</span>[] data =<span> Encoding.UTF8.GetBytes(sourceString);
</span><span> 9</span> SHA384 shaM =<span> SHA384.Create();
</span><span>10</span> <span>byte</span>[] result =<span> shaM.ComputeHash(data);
</span><span>11</span> StringBuilder EnText = <span>new</span><span> StringBuilder();
</span><span>12</span> <span>foreach</span> (<span>byte</span> iByte <span>in</span><span> result)
</span><span>13</span> <span> {
</span><span>14</span> EnText.AppendFormat(<span>"</span><span>{0:x2}</span><span>"</span><span>, iByte);
</span><span>15</span> <span> }
</span><span>16</span> <span>return</span><span> EnText.ToString();
</span><span>17</span> }

SHA512加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> SHA512_加密
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="sourceString"&gt;</span><span>原字符串</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;returns&gt;</span><span>加密后字符串</span><span>&lt;/returns&gt;</span>
<span> 6</span> <span>public</span> <span>static</span> <span>string</span> SHA512_Encrypt(<span>string</span><span> sourceString)
</span><span> 7</span> <span> {
</span><span> 8</span> <span>byte</span>[] data =<span> Encoding.UTF8.GetBytes(sourceString);
</span><span> 9</span> SHA512 shaM = <span>new</span><span> SHA512Managed();
</span><span>10</span> <span>byte</span>[] result =<span> shaM.ComputeHash(data);
</span><span>11</span> StringBuilder EnText = <span>new</span><span> StringBuilder();
</span><span>12</span> <span>foreach</span> (<span>byte</span> iByte <span>in</span><span> result)
</span><span>13</span> <span> {
</span><span>14</span> EnText.AppendFormat(<span>"</span><span>{0:x2}</span><span>"</span><span>, iByte);
</span><span>15</span> <span> }
</span><span>16</span> <span>return</span><span> EnText.ToString();
</span><span>17</span> }

AES加密、解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> AES加密
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="encryptStr"&gt;</span><span>加密字符串</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;param name="encryptKey"&gt;</span><span>密钥</span><span>&lt;/param&gt;</span>
<span> 6</span> <span>///</span> <span>&lt;returns&gt;</span><span>密码</span><span>&lt;/returns&gt;</span>
<span> 7</span> <span>public</span> <span>static</span> <span>string</span> AESEncrypt(<span>string</span> encryptStr, <span>string</span><span> encryptKey)
</span><span> 8</span> <span> {
</span><span> 9</span> <span>if</span> (<span>string</span><span>.IsNullOrWhiteSpace(encryptStr))
</span><span>10</span> <span>return</span> <span>string</span><span>.Empty;
</span><span>11</span>
<span>12</span> encryptKey = StringHelper.SubString(encryptKey, <span>32</span><span>);
</span><span>13</span> encryptKey = encryptKey.PadRight(<span>32</span>, <span>'</span> <span>'</span><span>);
</span><span>14</span>
<span>15</span> <span>//</span><span>分组加密算法</span>
<span>16</span> SymmetricAlgorithm des =<span> Rijndael.Create();
</span><span>17</span> <span>byte</span>[] inputByteArray = Encoding.UTF8.GetBytes(encryptStr);<span>//</span><span>得到需要加密的字节数组
</span><span>18</span> <span>//</span><span>设置密钥及密钥向量</span>
<span>19</span> des.Key =<span> Encoding.UTF8.GetBytes(encryptKey);
</span><span>20</span> des.IV =<span> _aeskeys;
</span><span>21</span> <span>byte</span>[] cipherBytes = <span>null</span><span>;
</span><span>22</span> <span>using</span> (MemoryStream ms = <span>new</span><span> MemoryStream())
</span><span>23</span> <span> {
</span><span>24</span> <span>using</span> (CryptoStream cs = <span>new</span><span> CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
</span><span>25</span> <span> {
</span><span>26</span> cs.Write(inputByteArray, <span>0</span><span>, inputByteArray.Length);
</span><span>27</span> <span> cs.FlushFinalBlock();
</span><span>28</span> cipherBytes = ms.ToArray();<span>//</span><span>得到加密后的字节数组</span>
<span>29</span> <span> cs.Close();
</span><span>30</span> <span> ms.Close();
</span><span>31</span> <span> }
</span><span>32</span> <span> }
</span><span>33</span> <span>return</span><span> Convert.ToBase64String(cipherBytes);
</span><span>34</span> <span> }
</span><span>35</span>
<span>36</span> <span>///</span> <span>&lt;summary&gt;</span>
<span>37</span> <span>///</span><span> AES解密
</span><span>38</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span>39</span> <span>///</span> <span>&lt;param name="decryptStr"&gt;</span><span>解密字符串</span><span>&lt;/param&gt;</span>
<span>40</span> <span>///</span> <span>&lt;param name="decryptKey"&gt;</span><span>密钥</span><span>&lt;/param&gt;</span>
<span>41</span> <span>///</span> <span>&lt;returns&gt;</span><span>原码</span><span>&lt;/returns&gt;</span>
<span>42</span> <span>public</span> <span>static</span> <span>string</span> AESDecrypt(<span>string</span> decryptStr, <span>string</span><span> decryptKey)
</span><span>43</span> <span> {
</span><span>44</span> <span>if</span> (<span>string</span><span>.IsNullOrWhiteSpace(decryptStr))
</span><span>45</span> <span>return</span> <span>string</span><span>.Empty;
</span><span>46</span>
<span>47</span> decryptKey = StringHelper.SubString(decryptKey, <span>32</span><span>);
</span><span>48</span> decryptKey = decryptKey.PadRight(<span>32</span>, <span>'</span> <span>'</span><span>);
</span><span>49</span>
<span>50</span> <span>byte</span>[] cipherText =<span> Convert.FromBase64String(decryptStr);
</span><span>51</span>
<span>52</span> SymmetricAlgorithm des =<span> Rijndael.Create();
</span><span>53</span> des.Key =<span> Encoding.UTF8.GetBytes(decryptKey);
</span><span>54</span> des.IV =<span> _aeskeys;
</span><span>55</span> <span>byte</span>[] decryptBytes = <span>new</span> <span>byte</span><span>[cipherText.Length];
</span><span>56</span> <span>using</span> (MemoryStream ms = <span>new</span><span> MemoryStream(cipherText))
</span><span>57</span> <span> {
</span><span>58</span> <span>using</span> (CryptoStream cs = <span>new</span><span> CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read))
</span><span>59</span> <span> {
</span><span>60</span> cs.Read(decryptBytes, <span>0</span><span>, decryptBytes.Length);
</span><span>61</span> <span> cs.Close();
</span><span>62</span> <span> ms.Close();
</span><span>63</span> <span> }
</span><span>64</span> <span> }
</span><span>65</span> <span>return</span> Encoding.UTF8.GetString(decryptBytes).Replace(<span>"</span><span>\0</span><span>"</span>, <span>""</span>);<span>//</span><span>将字符串后尾的'\0'去掉</span>
<span>66</span> }

DES加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> DES加密字符串
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="encryptString"&gt;</span><span>待加密的字符串</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;param name="encryptKey"&gt;</span><span>加密密钥,要求为8位</span><span>&lt;/param&gt;</span>
<span> 6</span> <span>///</span> <span>&lt;returns&gt;</span><span>加密成功返回加密后的字符串,失败返回源串</span><span>&lt;/returns&gt;</span>
<span> 7</span> <span>public</span> <span>string</span> EncryptDES(<span>string</span> encryptString, <span>string</span><span> encryptKey)
</span><span> 8</span> <span> {
</span><span> 9</span> <span>try</span>
<span>10</span> <span> {
</span><span>11</span> <span>byte</span>[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(<span>0</span>, <span>8</span><span>));
</span><span>12</span> <span>byte</span>[] rgbIV =<span> Keys;
</span><span>13</span> <span>byte</span>[] inputByteArray =<span> Encoding.UTF8.GetBytes(encryptString);
</span><span>14</span> DESCryptoServiceProvider dCSP = <span>new</span><span> DESCryptoServiceProvider();
</span><span>15</span> MemoryStream mStream = <span>new</span><span> MemoryStream();
</span><span>16</span> CryptoStream cStream = <span>new</span><span> CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
</span><span>17</span> cStream.Write(inputByteArray, <span>0</span><span>, inputByteArray.Length);
</span><span>18</span> <span> cStream.FlushFinalBlock();
</span><span>19</span> <span>return</span><span> Convert.ToBase64String(mStream.ToArray());
</span><span>20</span> <span> }
</span><span>21</span> <span>catch</span>
<span>22</span> <span> {
</span><span>23</span> <span>return</span><span> encryptString;
</span><span>24</span> <span> }
</span><span>25</span> <span> }
</span><span>26</span>
<span>27</span> <span>///</span> <span>&lt;summary&gt;</span>
<span>28</span> <span>///</span><span> DES解密字符串
</span><span>29</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span>30</span> <span>///</span> <span>&lt;param name="decryptString"&gt;</span><span>待解密的字符串</span><span>&lt;/param&gt;</span>
<span>31</span> <span>///</span> <span>&lt;param name="decryptKey"&gt;</span><span>解密密钥,要求为8位,和加密密钥相同</span><span>&lt;/param&gt;</span>
<span>32</span> <span>///</span> <span>&lt;returns&gt;</span><span>解密成功返回解密后的字符串,失败返源串</span><span>&lt;/returns&gt;</span>
<span>33</span> <span>public</span> <span>string</span> DecryptDES(<span>string</span> decryptString, <span>string</span><span> decryptKey)
</span><span>34</span> <span> {
</span><span>35</span> <span>try</span>
<span>36</span> <span> {
</span><span>37</span> <span>byte</span>[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(<span>0</span>, <span>8</span><span>));
</span><span>38</span> <span>byte</span>[] rgbIV =<span> Keys;
</span><span>39</span> <span>byte</span>[] inputByteArray =<span> Convert.FromBase64String(decryptString);
</span><span>40</span> DESCryptoServiceProvider DCSP = <span>new</span><span> DESCryptoServiceProvider();
</span><span>41</span> MemoryStream mStream = <span>new</span><span> MemoryStream();
</span><span>42</span> CryptoStream cStream = <span>new</span><span> CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
</span><span>43</span> cStream.Write(inputByteArray, <span>0</span><span>, inputByteArray.Length);
</span><span>44</span> <span> cStream.FlushFinalBlock();
</span><span>45</span> <span>return</span><span> Encoding.UTF8.GetString(mStream.ToArray());
</span><span>46</span> <span> }
</span><span>47</span> <span>catch</span>
<span>48</span> <span> {
</span><span>49</span> <span>return</span><span> decryptString;
</span><span>50</span> <span> }
</span><span>51</span> }

加密方法封装代码:

View Code