• 密码学系列——消息摘要(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个字节来进行校验,因为这已经够了。

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

  • 相关阅读:
    云图说 | GPU共享型AI容器,让AI开发更普及
    手把手带你写Node.JS版本小游戏
    一个银行客户经理的“变形记”
    大厂运维必备技能:PB级数据仓库性能调优
    软件工程开发之道:了解能力和复杂度是前提
    大数据管理:构建数据自己的“独门独院”
    结构体与共用体05 零基础入门学习C语言57
    结构体与共用体04 零基础入门学习C语言56
    PE格式详细讲解1 系统篇01|解密系列
    初步认识PE格式 基础篇06|解密系列
  • 原文地址:https://www.cnblogs.com/aoximin/p/13469395.html
Copyright © 2020-2023  润新知