密码学系列——消息摘要(c#代码实操)

前言

简介:

消息摘要(Message Digest)又称为数字摘要(Digital Digest)
它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生
使用数字摘要生成的值是不可以篡改的,为了保证文件或者值的安全

无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出
只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出
消息摘要是单向、不可逆的
常见算法 :

  • MD5
  • SHA1
  • SHA256
  • SHA512

正文

展示md5的消息加解密:

static void Main(string[] args)
{
	MD5 d5 = MD5.Create();
	byte[] buff=Encoding.Default.GetBytes("败落的城镇");
	byte[] md5buffer = d5.ComputeHash(buff);
	string str = "";
	foreach (byte b in md5buffer)
	{
             //转换为16进制
             str += b.ToString("x2");
	}
	Console.WriteLine(str);
	Console.ReadKey();
}

结果:

其他的消息摘要也是如此。

就是加密的思路就是:

转换为byte 数组。

然后对byte进行数字摘要,转换为16进制。

对了,消息摘要不可逆。

那么文件如何校验呢?文件考虑到一个点就是,文件特别大的情况下,难道全部读取出来做校验?

不是的,那么请看。

static void Main(string[] args)
{
	FileStream fileStream = new FileStream("C:\\test\\test.txt", FileMode.Open);
	byte[] bs = new byte[1024];
	fileStream.Read(bs,0,bs.Length);
	MD5 d5 = MD5.Create();
	var result= d5.ComputeHash(bs);
	var str = new StringBuilder();
	foreach (var s in result)
	{
		str.Append(s.ToString("x2"));
	}
	Console.WriteLine(str);
	Console.ReadKey();
}

我最多取1024个字节来进行校验,因为这已经够了。

因为如果客户端被破解,那么实际是没有意义的,文件校验是传输过程中避免被修改。

posted @ 2020-08-10 13:57  敖毛毛  阅读(501)  评论(0编辑  收藏  举报