做任务赚取佣金网站,wordpress字体修改,wordpress cms 模板制作,石家庄网站设计网站维护一、报文摘要算法基本概念
使用加密通常可达到报文鉴别的目的#xff0c;因为伪造的报文解密后一般不能得到可理解的内容。但简单采用这种方法#xff0c;计算机很难自动识别报文是否被篡改。另外#xff0c;对于不需要保密而只需要报文鉴别的网络应用#xff0c;对整个…一、报文摘要算法基本概念
使用加密通常可达到报文鉴别的目的因为伪造的报文解密后一般不能得到可理解的内容。但简单采用这种方法计算机很难自动识别报文是否被篡改。另外对于不需要保密而只需要报文鉴别的网络应用对整个报文的加密和解密会使计算机增加很多不必要的负担加密和解密要花费相当多的CPU时间。
更有效的方法是使用报文摘要MessageDigestMD来进行报文鉴别。
发送方将可变 长度的报文m经过报文摘要算法运算后得出固定长度的报文摘要H(m)。然后对H(m)进行加密得出EK(H(m))并将其附加在报文m后面发送出去。接收方把EK(H(m))解密还原为H(m)再把收到的报文进行报文摘要运算看结果是否与收到的H(m)一样。如不一样则可断定收到的报文不是发送方产生的。具体流程如下 目前广泛应用的报文摘要算法有MD5[RFC1321]和安全散列算法1SecureHashAlgorithm,SHA-1。MD5输出128位的摘要SHA-1输出160位的摘要。SHA-1比MD5更安全些但计算起来比MD5要慢。
二、.NET 使用 MD5、SHA1、SHA128、SHA512 报文摘要算法 1 using System;2 using System.Security.Cryptography;3 using System.Text;4 5 namespace encryption.md56 {7 public class Md5Util8 {9 public enum MD
10 {
11 MD5,
12 SHA1,
13 SHA256,
14 SHA512,
15 }
16 private static HashAlgorithm CreateHashAlgorithm(MD sha)
17 {
18 switch (sha)
19 {
20 case MD.MD5:
21 return new MD5CryptoServiceProvider();
22 case MD.SHA1:
23 return SHA1.Create();
24 case MD.SHA256:
25 return SHA256.Create();
26 case MD.SHA512:
27 return SHA512.Create();
28 }
29
30 throw new Exception($The type does not exits,type:{sha});
31 }
32
33 /// summary
34 /// 获取指定byte数组的MD5
35 /// /summary
36 /// param namesource/param
37 /// param nameencodingsee crefEncoding/默认值UTF8/param
38 /// returns/returns
39 public static byte[] GetMD5(byte[] source, MD shaMD.MD5, Encoding encoding null)
40 {
41 byte[] output CreateHashAlgorithm(sha).ComputeHash(source);
42 return output;
43 }
44
45 /// summary
46 /// 获取指定字符串的MD5
47 /// /summary
48 /// param namesource/param
49 /// param nameencodingsee crefEncoding/默认值UTF8/param
50 /// returns/returns
51 public static byte[] GetMD5(string source, MD sha MD.MD5, Encoding encoding null)
52 {
53 if (encoding null) encoding Encoding.UTF8;
54 return GetMD5(encoding.GetBytes(source), sha, encoding);
55 }
56
57
58 /// summary
59 /// MD5 校验
60 /// /summary
61 /// param nameinput校验二进制/param
62 /// param namehash待比较的MD5 值/param
63 /// param nameencoding/param
64 /// returnstrue:相同;false:被纂改/returns
65 public static bool VerifyMD5(byte[] input, byte[] hash, MD sha MD.MD5, Encoding encoding null)
66 {
67 if (encoding null) encoding Encoding.UTF8;
68 var buffer GetMD5(input, sha,encoding);
69 if (Convert.ToBase64String(buffer) Convert.ToBase64String(hash))
70 {
71 return true;
72 }
73 return false;
74 }
75
76 /// summary
77 /// MD5 校验
78 /// /summary
79 /// param nameinput校验字符串/param
80 /// param namehash待比较的MD5 值/param
81 /// param nameencoding/param
82 /// returnstrue:相同;false:被纂改/returns
83 public static bool VerifyMD5(string input, byte[] hash, MD sha MD.MD5, Encoding encoding null)
84 {
85 if (encoding null) encoding Encoding.UTF8;
86 return VerifyMD5(encoding.GetBytes(input), hash, sha,encoding);
87 }
88 }
89 }三、测试代码与结果 1 static void Main()2 {3 {4 Console.WriteLine(-----------------------------------------------------生成MD5--------------------------------------------------);5 var input 目前广泛应用的报文摘要算法有MD5[RFC1321]和安全散列算法1SecureHashAlgorithm,SHA-1。;6 Console.WriteLine($内容{input});7 byte[] md5 Md5Util.GetMD5(input);8 Console.WriteLine($MD5{Convert.ToBase64String(md5)});9 }
10
11 {
12 Console.WriteLine(-----------------------------------------------------MD5防篡改校验--------------------------------------------------);
13 var input https://docs.microsoft.com/zh-tw/dotnet/api/system.security.cryptography.md5?viewnet-5.0;
14 Console.WriteLine($内容{input});
15 byte[] md5 Md5Util.GetMD5(input不一致);
16 Console.WriteLine($MD5校验{Md5Util.VerifyMD5(input, md5)});
17 }
18
19 {
20 Console.WriteLine(-----------------------------------------------------生成SHA512--------------------------------------------------);
21 var input 目前广泛应用的报文摘要算法有MD5[RFC1321]和安全散列算法1SecureHashAlgorithm,SHA-1。;
22 Console.WriteLine($内容{input});
23 byte[] md5 Md5Util.GetMD5(input,Md5Util.MD.SHA512);
24 Console.WriteLine($SHA512{Convert.ToBase64String(md5)});
25 }
26
27 {
28 Console.WriteLine(-----------------------------------------------------SHA512防篡改校验--------------------------------------------------);
29 var input https://docs.microsoft.com/zh-tw/dotnet/api/system.security.cryptography.md5?viewnet-5.0;
30 Console.WriteLine($内容{input});
31 byte[] md5 Md5Util.GetMD5(input, Md5Util.MD.SHA512);
32 Console.WriteLine($SHA512校验{Md5Util.VerifyMD5(input, md5, Md5Util.MD.SHA512)});
33 }
34
35 Console.ReadKey();
36 }