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

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

  • 相关阅读:
    5.4 类型转换
    IntelliJ IDEA 创建Web项目(全教程)
    Spring IoC 依赖注入的方法大全 XML配置方式
    20秒教你如何写maven2的pom文件的依赖包
    数据库面试题之COUNT(*),COUNT(字段),CONUT(DISTINCT 字段)的区别
    Oracle中的单行函数
    Select 子句后的别名,在where条件中不能使用
    Oracle SQL*Plus命令
    使用js请求Servlet时的路径
    idea 创建运行web项目时,报错: Can not issue executeUpdate() for SELECTs解决方案
  • 原文地址:https://www.cnblogs.com/aoximin/p/13469395.html
Copyright © 2011-2022 走看看