当前位置: 首页 > news >正文

计算机网络安全 —— 报文摘要算法 MD5

一、报文摘要算法基本概念

​ 使用加密通常可达到报文鉴别的目的,因为伪造的报文解密后一般不能得到可理解的内容。但简单采用这种方法,计算机很难自动识别报文是否被篡改。另外,对于不需要保密而只需要报文鉴别的网络应用,对整个报文的加密和解密,会使计算机增加很多不必要的负担(加密和解密要花费相当多的CPU时间)。

​ 更有效的方法是使用报文摘要(MessageDigest,MD)来进行报文鉴别

​ 发送方将可变 长度的报文m经过报文摘要算法运算后,得出固定长度的报文摘要H(m)。然后对H(m)进行加密,得出EK(H(m)),并将其附加在报文m后面发送出去。接收方把EK(H(m))解密还原为H(m),再把收到的报文进行报文摘要运算,看结果是否与收到的H(m)一样。如不一样,则可断定收到的报文不是发送方产生的。具体流程如下:

img

​ 目前广泛应用的报文摘要算法有MD5[RFC1321]和安全散列算法1(SecureHashAlgorithm,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 name="source"></param>
37         /// <param name="encoding"><see cref="Encoding"/>默认值:UTF8</param>
38         /// <returns></returns>
39         public static byte[] GetMD5(byte[] source, MD sha=MD.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 name="source"></param>
49         /// <param name="encoding"><see cref="Encoding"/>默认值: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 name="input">校验二进制</param>
62         /// <param name="hash">待比较的MD5 值</param>
63         /// <param name="encoding"></param>
64         /// <returns>true:相同;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 name="input">校验字符串</param>
80         /// <param name="hash">待比较的MD5 值</param>
81         /// <param name="encoding"></param>
82         /// <returns>true:相同;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]和安全散列算法1(SecureHashAlgorithm,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?view=net-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]和安全散列算法1(SecureHashAlgorithm,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?view=net-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     }

img

相关文章:

计算机网络安全 —— 报文摘要算法 MD5

一、报文摘要算法基本概念 ​ 使用加密通常可达到报文鉴别的目的&#xff0c;因为伪造的报文解密后一般不能得到可理解的内容。但简单采用这种方法&#xff0c;计算机很难自动识别报文是否被篡改。另外&#xff0c;对于不需要保密而只需要报文鉴别的网络应用&#xff0c;对整个…...

LeetCode 746. 使用最小花费爬楼梯 java题解

https://leetcode.cn/problems/min-cost-climbing-stairs/description/ 优化&#xff1a;可以不用dp数组&#xff0c;用变量&#xff0c;节省空间。 class Solution {public int minCostClimbingStairs(int[] cost) {int lencost.length;int[] dpnew int[len1];dp[0]0;//爬到0…...

Kubernetes的pod控制器

文章目录 一&#xff0c;什么是pod控制器二&#xff0c;pod控制器类型&#xff08;重点&#xff09;1.ReplicaSet2.Deployment3.DaemonSet4.StatefulSet5.Job6.Cronjob 三&#xff0c;pod与控制器的关系1.Deployment2.SatefulSet2.1StatefulSet组成2.2headless的由来2.3有状态服…...

ArcMap 处理栅格数据地形图配准操作

ArcMap 处理栅格数据地形图配准操作今天分享 一、地形图配准 1、绘图 点击 开始绘制&#xff0c;四条线 2、地理配准 1&#xff09;点击弹出 2&#xff09;画控制点 关闭自动校正 画线 从焦点向外划线&#xff0c;然后邮件输入坐标弹出框&#xff0c;填写相应内容&#xff0c…...

comprehension

1.读题---猜---文章主题 只读题目&#xff0c;不读选项 2.文章--定位 3.用文章对应选项 1 be based on be dependent upon 2 fruitful adj.富有成效的;硕果累累的; 3 unfruitful adj.徒然的&#xff0c;无益的&#xff0c;没有结果的 4 desperately adv.拼命地&#x…...

开源宝藏:Smart-Admin 重复提交防护的 AOP 切面实现详解

首先&#xff0c;说下重复提交问题&#xff0c;基本上解决方案&#xff0c;核心都是根据URL、参数、token等&#xff0c;有一个唯一值检验是否重复提交。 而下面这个是根据用户id&#xff0c;唯一值进行判定&#xff0c;使用两种缓存方式&#xff0c;redis和caffeine&#xff…...

使用 npm 安装 Electron 作为开发依赖

好的&#xff0c;下面是一个使用 npm pack 和 npm install 命令来打包和安装离线版本的 npm 包的具体示例。我们将以 electron 为例&#xff0c;演示如何在有网络连接的机器上打包 electron&#xff0c;然后在没有网络连接的机器上安装它。 步骤 1: 在有网络连接的机器上打包 …...

JavaWeb之综合案例

前言 这一节讲一个案例 1. 环境搭建 然后就是把这些数据全部用到sql语句中执行 2.查询所有-后台&前台 我们先写后台代码 2.1 后台 2.2 Dao BrandMapper&#xff1a; 注意因为数据库里面的名称是下划线分割的&#xff0c;我们类里面是驼峰的&#xff0c;所以要映射 …...

MySQL 报错:1137 - Can‘t reopen table

MySQL 报错&#xff1a;1137 - Can’t reopen table 1. 问题 对临时表查询&#xff1a; select a.ts_code,a.tsnum,b.tsnum from (select t.ts_code ,count(*) tsnum from tmp_table t group by t.ts_code having count(*) > 20 and count(*)< 50 ) a ,(select t.ts_…...

Claude3.5-Sonnet和GPT-4o怎么选(附使用链接)

随着人工智能模型的不断进化&#xff0c;传统的评估标准已经逐渐变得陈旧和不再适用。以经典的“喝水测试”为例&#xff0c;过去广泛应用于检测模型能力&#xff0c;但现如今即便是国内的一些先进模型&#xff0c;也能够轻松答对这些简单的问题。因此&#xff0c;我们亟需引入…...

使用itextpdf进行pdf模版填充中文文本时部分字不显示问题

在网上找了很多种办法 都解决不了; 最后发现是文本域字体设置出了问题; 在这不展示其他的代码 只展示重要代码; 1 引入扩展包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</v…...

java-贪心算法

1. 霍夫曼编码&#xff08;Huffman Coding&#xff09; 描述&#xff1a; 霍夫曼编码是一种使用变长编码表对数据进行编码的算法&#xff0c;由David A. Huffman在1952年发明。它是一种贪心算法&#xff0c;用于数据压缩。霍夫曼编码通过构建一个二叉树&#xff08;霍夫曼树&a…...

OpenCV和Qt坐标系不一致问题

“ OpenCV和QT坐标系导致绘图精度下降问题。” OpenCV和Qt常用的坐标系都是笛卡尔坐标系&#xff0c;但是细微处有些不同。 01 — OpenCV坐标系 OpenCV是图像处理库&#xff0c;是以图像像素为一个坐标位置&#xff0c;即一个像素对应一个坐标&#xff0c;所以其坐标系也叫图像…...

前端VUE项目启动方式

将VUE项目的前端项目运行起来&#xff0c;整个过程非常简单&#xff0c;预计5分钟就可以完成&#xff0c;取决于大家的网速。 项目运行先安装Node.js Windows 安装 Node.js 指南&#xff1a;http://www.iocoder.cn/NodeJS/windows-install(opens new window) Mac 安装 Node.js…...

Python小白学习教程从入门到入坑------习题课5(基础巩固)

目录 实战题 1、“千年虫”是什么虫? 2、模拟京东购物流程 3、模拟12306火车票订票流程 4、模拟手机通讯录 实战题 1、“千年虫”是什么虫? 要求:已知一个列表中存储的是员工的出生年份 [88,89,90,98,00,99] 由于时间比较久&#xff0c;出生的年份均为2位整数&#xf…...

飞凌嵌入式T113-i开发板RISC-V核的实时应用方案

随着市场对嵌入式设备的功能需求越来越高&#xff0c;集成了嵌入式处理器和实时处理器的主控方案日益增多&#xff0c;以便更好地平衡性能与效率——实时核负责高实时性任务&#xff0c;A核处理复杂任务&#xff0c;两核间需实时交换数据。然而在数据传输方面&#xff0c;传统串…...

基于Java后台实现百度、高德和WGS84坐标的转换实战

目录 前言 一、需求的缘由 1、百度坐标拾取 2、高德坐标拾取 3、不同地图的坐标展示 二、后端坐标偏移转换处理 1、相关类库介绍 2、coordtransorm类图介绍 3、后台实际转换 三、总结 前言 在当今数字化时代&#xff0c;地理位置信息的精确性和实时性对于各种应用至…...

SQL,力扣题目1635,Hopper 公司查询 I

一、力扣链接 LeetCode_1635 二、题目描述 表: Drivers ---------------------- | Column Name | Type | ---------------------- | driver_id | int | | join_date | date | ---------------------- driver_id 是该表的主键(具有唯一值的列)。 该表的每一行…...

Android 分区相关介绍

目录 一、MTK平台 1、MTK平台分区表配置 2、MTK平台刷机配置表 3、MTK平台分区表配置不生效 4、Super分区的研究 1&#xff09;Super partition layout 2&#xff09;Block device table 二、高通平台 三、展锐平台 四、相关案例 1、Super分区不够导致编译报错 经验…...

JMeter监听器与压测监控之 InfluxDB

1. 简介 在本文中&#xff0c;我们将介绍如何在 Kali Linux 上通过 Docker 安装 InfluxDB&#xff0c;并使用 JMeter 对其进行性能监控。InfluxDB 是一个高性能的时序数据库&#xff0c;而 JMeter 是一个开源的性能测试工具&#xff0c;可以用于对各种服务进行负载测试和性能监…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...