【MD5知识详解】【面试知识】

news2024/12/22 19:58:33

在这里插入图片描述

MD5概述:

MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。

MD5主要特点:

  • 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样

(一个MD5理论上的确是可能对应无数多个原文的,因为MD5是有限多个的而原文可以是无数多个。比如主流使用的MD5将任意长度的“字节串映射为一个128bit的大整数。也就是一共有2128种可能,大概是 3.4*1038,这个数字是有限多个的,而但是世界上可以被用来加密的原文则会有无数的可能性)

MD5的性质:

  • 容易计算:从原数据计算出MD5值很容易。
  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的(相当于超损压缩)。
  • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  • 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
  • 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

MD5是否可以被破解

但是由于某些MD5破解网站,专门用来查询MD5码,其通过把常用的密码先MD5处理,并将数据存储起来,然后跟需要查询的MD5结果匹配,这时就有可能通过匹配的MD5得到明文,所以有些简单的MD5码是反查到加密前原文的。对于简单的暴力破解一定程度可以行

MD5用途:

  1. 防止被篡改:

比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。

比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。

SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

  1. 防止直接看到明文:

现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。(比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。).

3.防止抵赖(数字签名):

这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。

算法原理

MD5算法原理

C# 实现字符串MD5加密

 public static string ToMD5(string Text)
 {
     byte[] buffer = System.Text.Encoding.UTF8.GetBytes(Text);
     try
     {
         //官方不推荐使用该方法
         //System.Security.Cryptography.MD5CryptoServiceProvider check;
         //check = new System.Security.Cryptography.MD5CryptoServiceProvider();
         //check.ComputeHash(buffer);

         //128位
         //MD5 md5 = System.Security.Cryptography.MD5.Create();
         //256位
         //SHA256 md5 = System.Security.Cryptography.SHA256.Create();
         //512位
         SHA512 md5 = System.Security.Cryptography.SHA512.Create();
         byte[] somme = md5.ComputeHash(buffer);
         string ret = "";

         foreach (byte a in somme)
         {
             if (a < 16)
                 ret += "0" + a.ToString("X");
             else
                 ret += a.ToString("X");//转成16进制数
         }
         return ret.ToLower();
     }
     catch
     {
         throw;
     }
 }

三种情况输出结果

在这里插入图片描述

额外知识

  • UTF-8字符集,一个汉字占三个字节,
  • 1字节(Byte)=8字位=8个二进制数
  • 1字位(bit)=1个二进制数

不同编码对应字节数

英文字母
字节数 : 1;  编码:GB2312
字节数 : 1;  编码:GBK
字节数 : 1;  编码:GB18030
字节数 : 1;  编码:ISO-8859-1
字节数 : 1;  编码:UTF-8
字节数 : 4;  编码:UTF-16
字节数 : 2;  编码:UTF-16BE
字节数 : 2;  编码:UTF-16LE
中文汉字:
字节数 : 2;  编码:GB2312
字节数 : 2;  编码:GBK
字节数 : 2;  编码:GB18030
字节数 : 1;  编码:ISO-8859-1
字节数 : 3;  编码:UTF-8
字节数 : 4;  编码:UTF-16
字节数 : 2;  编码:UTF-16BE
字节数 : 2;  编码:UTF-16LE

参考链接

字节知识点
MD5原理
字符集介绍
UTF-8字符对照表
MD5官方解释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序nodejs+vue个人身体健康管理系统56b65

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 。配置文件 (自动编号、配置参数值、配置参数名称)&#xff1b; 论坛交流 (自动编号、用户id、状态、父节点id、帖子标题、用户名…

ndoejs基于Vue.js二手书交易网站系统x3oh4

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 本毕业设计的内容是设计并且实现一个基于vue框架的二手书交易系统。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xf…

chatgpt赋能python:Python取消warning指南:如何避免和处理警告

Python取消warning指南&#xff1a;如何避免和处理警告 如果您已经在使用Python编程&#xff0c;那么您一定会遇到过警告&#xff08;warning&#xff09;这个问题。虽然警告有时可能很有用&#xff0c;但在特定情况下&#xff0c;它们可能会引起程序错误或产生意想不到的行为…

Depcheck 检查前端项目中未使用的依赖包

前言 随着前端项目的迭代&#xff0c;项目中一部分的依赖包可能没被项目所使用的&#xff0c;手动查找这些依赖包耗时又繁琐&#xff0c;有没有根据能够快速的帮助我们识别和清理项目中未使用的依赖包呢&#xff1f; Depcheck 简介 Depcheck 是一款用于分析项目中依赖关系的…

windows下的SVN客户端访问ubuntu下的SVN服务器

目录 第一部分 windows创建本地版本库、连接ubuntu的SVN服务器 步骤0&#xff1a; 步骤一&#xff1a;创建windows本地版本库 步骤二&#xff1a;checkout检测 步骤三&#xff1a;输入之前配置的用户名和密码 第二部分 windows上传文件至SVN服务器 步骤一&#xff1a;添加…

Python数据攻略-DataFrame的创建与基础特性

大家好&#xff0c;我是Mr数据杨&#xff0c;今天我带来的是一本既实用又有趣的Python教程笔记&#xff0c;主角是Pandas DataFrame。它就像《三国演义》中的诸葛亮&#xff0c;机智、实用&#xff0c;可以帮助我们轻松处理各种数据问题。 我们来看如何创建诸葛亮——这个Data…

实现UDP通信(socket接口函数扩展)

一、write/read到send/recv 函数原型&#xff1a; ussize_t send(int sockfd, const void *buf, size_t len, int flags);//发送 ussize_t recv(int sockfd, void *buf, size_t len, int flags);//接收 前三个参数同read/write一样&#xff1b; ussize_t read(int fd, voi…

2023CCPC河南省赛 VP记录

感觉现在的xcpc&#xff0c;风格越来越像CF&#xff0c;不是很喜欢&#xff0c;还是更喜欢多点算法题的比赛 VP银了&#xff0c;VP银也是银 感觉省赛都是思维题&#xff0c;几乎没有算法题&#xff0c;感觉像打了场大型的CF B题很简单没开出来&#xff0c;一直搞到最后&…

Android crash 流程详解(二):NE

源码基于&#xff1a;Android R 接上一篇博文&#xff1a;《Android crash 流程详解(一)&#xff1a;JE》 0. 前言 在上一篇博文剖析了java layer exception 的处理流程&#xff0c;本文将继续剖析 Android crash 的另一部分&#xff0c;即 native 端的 crash&#xff0c;又称…

【JavaEE】网络编程之UDP套接字

目录 1、网络编程基础 2、UDP数据报套接字编程 2.1.DatagramSocket API&#xff08;方法&#xff09; 2.2、DatagramPacket API&#xff08;方法&#xff09; 2.3、InetSocketAddress API 3、基于UDP socket写一个回显服务器 3.1、服务器端 3.2 、客户端 3.3、完…

机器学习常识 21: 卷积神经网络

摘要: 卷积操作保留体现了空间相关性. 1. 卷积操作 图 1. 卷积操作 Valid 方式. 图 1 下平面标定的 3 3 3 \times 3 33 区域, 对应于个 3 3 3 \times 3 33 卷积, 这 9 9 9 个数对应着相乘, 然后相加, 获得了上平面标定的 1 1 1 个小区域的值. 注意这里不是矩阵的乘法. 卷…

《大数据技术与应用》课程实验报告|week12|实验8|Pig——高级编程环境 验证评估函数

目录 一、实验内容 二、实验目的 三、实验设备 四、实验步骤 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 步骤八 步骤九 步骤十 步骤十一 步骤十二 步骤十三 步骤十四 步骤十五 步骤十六 五、实验结果 六、实验小结 一、实验内容 验证19.5节中的…

Apache网页的日志分割与优化

Apache网页的日志分割与优化 一、日志分割的作用二、rotatelogs 分割1.修改apache服务的主配置文件2.创建分割日志保存目录3.浏览器访问 三、AWStats 分析系统1.将安装AWStats 所需软件包传到/opt目录下2.安装 AWStats 软件包3.为要统计的站点建立配置文件4.修改自动生成的 aws…

电表的698通信协议

原文连接&#xff1a;https://blog.csdn.net/ss86655/article/details/109997891 该协议规定了用电信息的数据交换过程&#xff0c;一般用于主站与电能表之间、终端与电能表之间的数据交换&#xff0c;主站与终端一般用不同的客户机地址来区分。1、通信架构 有两种方向的数据…

linux系统中代码突然无法执行,没有权限访问文件,但是可以在文件管理器中查看文件

前言 这段时间遇到了一个非常离谱的问题&#xff0c;我的只要设计移动硬盘中数据的所有代码突然无法运行&#xff0c;我折腾了很久一直觉得是移动硬盘坏了&#xff0c;但拿到其他电脑上去是可以运动的。今天终于偶然发现了问题。 直接说结论&#xff1a; 移动硬盘的挂载点变了…

SQL-DML、DQL查询数据

SQL-DML、DQL查询数据 1 DML DML主要是对数据进行增&#xff08;insert&#xff09;删&#xff08;delete&#xff09;改&#xff08;update&#xff09;操作。 1.1 添加数据 给指定列添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);给全部列添加数据 INSERT…

MySQL数据库性能优化技巧介绍

MySQL是目前最流行和广泛使用的开源关系型数据库之一&#xff0c;随着数据量的增长和访问负载的提高&#xff0c;优化数据库性能变得至关重要&#xff0c;以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧&#xff0c;提高数据库的运行效率&a…

程序员——应届生毕业,竟有20k高薪岗位?!

马士兵优极限训练营让我在技术和个人能力上都有了很大的提升。在未来的职业生涯中&#xff0c;我会继续努力&#xff0c;不断学习和成长&#xff0c;为自己和社会做出更大的贡献 01 选择大数据 只因更有前景 我是计算机专业出身&#xff0c;但是在大学的时候我对大数据行业更…

vue3 ---- 递归组件生成menu菜单 路由守卫鉴权

目录 递归组件​ el-menu 父组件 子组件 路由 Vue路由守卫实现登录鉴权 全局守卫 路由独享的守卫 组件内的守卫 完整的导航解析流程 对于一些有规律的DOM结构&#xff0c;如果我们再一遍遍的编写同样的代码&#xff0c;显然代码是比较繁琐和不科学的&#xff0c;而且…

5个有效方法教你如何正确使用云渲染,防错必备!

随着技术的进步和计算能力的提升&#xff0c;云渲染成为了现代计算机图形学和动画制作中不可或缺的一环。无论是在电影、游戏还是建筑可视化等领域&#xff0c;渲染图像的质量和效率都对最终结果有着巨大的影响。然而&#xff0c;云渲染也面临着一些潜在的问题&#xff0c;如渲…