MD5学习总结

2023-11-17

1. MD5简介

MD5,即消息摘要算法第五版,是一种被广泛使用的密码散列函数。散列算法的基本原理是:进行数据(如一段文字)运算,将原始数据变为另一段固定长度的值

MD5 可以产生出一个 128位(16字节)的散列值(hash value),用于确保传输信息的完整性。

MD5 由美国密码学家 Ronald Linn Rivest 设计,于 1992 年公开,用以取代 MD4 算法。

2. MD5原理

MD5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的MD5信息摘要。文件的MD5类似于人的指纹,在世界上是独立无二的,如果任何人对文件做了任何改动,其MD5的值也就是对应的“数字指纹”都会发生变化。

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

MD5与对称和非对称加密算法不同,这两种密码(对称和非对称加密算法)是防止信息被窃取,而摘要算法的目标是用于证明原文的完整性(本质上MD5不属于加密算法)。

3. MD5特性

  • 不可逆:没有系统有办法知道MD5原来的文字是什么。
  • 压缩性:任意长度的数据,运算得出的 MD5 值长度都是固定的(128位);
  • 抗修改性:对原数据进行的任何改动,哪怕只修改 1 个字节,所得到的 MD5 值都有很大区别;
  • 强抗碰撞:已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难的。

4. MD5的用途

  • 密码的加密存储,用户设置密码时,服务端只记录这个密码的MD5,而不记录密码本身,以后验证用户身份时,只需要将用户输入的密码再次做一下MD5后,与记录的MD5作一个比较即可验证其密码的合法性。
  • 数字签名,比如发布一个程序,为了防止别人在你的程序里插入病毒或木马,你可以在发布这个程序的同时,公开这个程序文件的MD5码,这样别人只需要在任何地方下载这个程序后做一次MD5,然后跟公开的这个MD5作一个比较就知道这个程序是否被第三方修改过。
  • 文件完整性验证,比如当下载一个文件时,服务器返回的信息中包括这个文件的md5,在本地下载完毕时进行md5,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象。
  • 文件上传,比如百度云实现的秒传,就是对比你上传的文件md5在百度服务器是否已经存在了。

5、C/C++中MD5的使用

  • 方式一:openssl库中有很多用于摘要哈希、加密解密的算法,方便集成于工程项目,被广泛应用于网络报文中的安全传输和认证。其中MD5算法在openssl库也有被实现。

    // 方法一:
    #include<stdio.h>
    #include<openssl/md5.h>
    #include<string.h>
    
    int main( int argc, char **argv )
    {
        MD5_CTX ctx;
        unsigned char *data="123";
        unsigned char md[16];
        char buf[33]={'\0'};
        char tmp[3]={'\0'};
        int i;
    
        MD5_Init(&ctx);
        MD5_Update(&ctx,data,strlen(data));
        MD5_Final(md,&ctx);
    
        for( i=0; i<16; i++ ){
        	sprintf(tmp,"%02X",md[i]);
        	strcat(buf,tmp);
        }
    	printf("%s\n",buf);
    	return 0;
    }
    
    // 输出:
    // 202CB962AC59075B964B07152D234B70
    
    // 方法二:
    #include<stdio.h>
    #include<openssl/md5.h>
    #include<string.h>
    
    int main( int argc, char **argv )
    {
        unsigned char *data = "123";
        unsigned char md[16];
        int i;
        char tmp[3]={'\0'},buf[33]={'\0'};
        MD5(data,strlen(data),md);
            for (i = 0; i < 16; i++){
            sprintf(tmp,"%2.2x",md[i]);
            strcat(buf,tmp);
    	}
        printf("%s\n",buf);
        return 0;
    }
    // 输出:
    // 202cb962ac59075b964b07152d234b70
    
    // 总结:两种实现方式,一样的结果。相比较,第二种方法更直观简单些。
    
  • 方式二:除了直接使用openssl,还可以将openssl库中的MD5代码拿下来简单封装,这样之后可以便捷的移植到其他项目中,而不用每次下载编译openssl库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MD5学习总结 的相关文章

  • 计算机内存取证之BitLocker恢复密钥提取还原

    BitLocker是微软Windows自带的用于加密磁盘分卷的技术 通常 解开后的加密卷通过Windows自带的命令工具 manage bde 可以查看其恢复密钥串 如下图所示 如图 这里的数字密码下面的一长串字符串即是下面要提取恢复密钥
  • 日期格式转换工具类(线程安全)

    import java text ParseException import java time import java time format DateTimeFormatter import java time temporal Chr
  • TSDB时序数据库-OpenTSDB

    TSDB时序数据库 OpenTSDB 背景 一 概念 二 使用引入 背景 需要及时获取短信发送消息队列的堆积情况 pass将相关信息及时的存入了opentsdb时序数据库中 现需要读取时序数据库将堆积情况以短信形式通知 一 概念 时间序列数
  • 打造利器Qt Creator:代码todo工具的使用

    打造利器Qt Creator 代码todo工具的使用 前言 俗话说 工欲善其事必先利其器 工作生活中 能有一款出色易用 高效简便的工具 对提高效率 达成价值有着莫大的影响 Qt是一套C 库 封装了许多好用的模块和功能 且带有先进的GUI设计
  • Git恢复本地误删文件

    转 https www cnblogs com yangshifu p 9680993 html Step 1 git status Step 2 git reset HEAD 被删除的文件或文件夹 Step 3 git checkout
  • 常见加密算法实现——DES、AES、RSA、MD5

    一 对称加密 1 介绍 对称加密 加密和解密使用同一个密钥 对称加密算法 DES 3DES AES等 DES 数据加密标准 是一种使用密钥加密的块算法 3DES DES向AES过渡的加密算法 AES 高级加密标准 替代DES 对称加密的特点
  • window10安装CUDA7.0-8.0-9.0

    因为需求 没办法 window10 x64 家庭版 无所谓 VS 2013 专业版 x64 现在安装CUDA 顺序 CUDA 9 0 176 CUDA 8 0 61 CUDA 7 0 27 CUDA9 0是完整安装 8 0和7 0 不要安装
  • centos安装docker后,ping不能服务器ip

    工作中碰的问题 记录下解决过程 问题描述 2台内网服务器 A 172 20 72 77 和B 172 17 3 222 在A服务上ping B 安装 docker之前是可以ping通 安装docker之后确ping不通了 查找原因 在安装d
  • java调第三方接口

    目录 背景 Spring的RestTemplate 1 引入依赖 2 RestTemplate配置类 3 RestTemplate实现类 背景 java调第三方接口我百度的有三种方法 第一种 通过JDK网络类Java net HttpURL
  • JAVA基于Slack实现异常日志报警

    一 功能介绍 在我们日常开发中 如果系统在线上环境上 发生异常 开发人员不能及时知晓来修复 可能会造成重大的损失 因此后端服务中加入异常报警的功能是十分必要的 而开发一个功能全面的异常报警服务 可能会花费较长的周期 今天给大家带来一种基于S
  • 写给小白的常见三种加密方式:MD5,对称非对称加密

    我们在做数据类传输产品或测试的过程中 总会听到开发说数据要加密 然后使用各种加密方式 那么希望通过本文 能够让大家对一些常见的加密方式有一些更加深入的了解 理解其中的底层逻辑 今天介绍三种常见的加密方式 MD5加密 对称加密 非对称加密 1
  • java 直接读取zip文件和文件内容

    不解压zip文件 直接读取zip包内的文件夹以及文件内容 zip包内内容 代码如下 import java io import java nio charset Charset import java util zip ZipEntry i
  • Java占位符总结

    文章目录 实现方式 方式一 jdk1 8 java text MessageFormat 方式二 Log4j javaorg slf4j helpers MessageFormatter 方式三 commons text org apach
  • IDEA下SpringBoot指定环境、配置文件启动

    1 idea下的SpringBoot启动 指定配置文件 Springboot项目有如下配置文件 主配置文件application yml 测试环境 application test yml 生产环境 application pro yml
  • 混淆保护需正确命名!看.NET Core代码保护工具.NET Reactor如何规定

    NET Reactor是一个功能强大的代码保护和软件许可系统 适用于为 NET Framework编写的软件 并支持生成 NET程序集的所有语言 NET Reactor迎来了久违的版本更新 进入v6 3 0 0全新时代 支持Blazor保护
  • Android中使用AES加密和解密

    Android中如何使用AES进行加密和解密 作为初入社会的IT行业的大专实习生 只能在公司里被当牛一样每天工作到半夜十二点以后 在这里也是第一次写博客 目的只有两个 1 记录技术实现 尽可能的帮助网友解决困难 2 吐槽公司 不多说了 直接
  • Unity手游资源修改流程

    最近接到一个Android手游汉化需求 研究了一下 特此记录 开发环境 AssetStudioGUI 该软件可解析 定位压缩后的Unity 资源 下载 https github com Perfare AssetStudio AssetBu
  • Java开发工具Idea Revert操作

    Revert是撤销操作 类似于Ctrl Z 不同的是 Revert是以版本为单位 撤销整个版本 可以这样理解Revert操作 假如有V1 V2 V3 V4 V5五个版本 Revert撤销V3版本 实际上就是合并V2版本和V5版本 并对V2版
  • 作为字典数据获取枚举值

    RequestMapping value getAmmeterType method RequestMethod GET ResponseBody ApiOperation notes 获取电表类型 value 获取电表类型 public
  • Java基础之随机生成数字和字母

    原文地址 http blog csdn net yaodong y article details 8115250 字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码 是由美国国家标准局 ANSI 制定的ASCII码 Am

随机推荐

  • IDEA中SVN的使用大全

    SVN 在日常工作中 给我们带来许多的方便和高效 今天特此记录一下在 IDEA 中如何使用 SVN 一 IDEA 连接 SVN 打开 IDEA 选择菜单 File gt Settings 搜索 Subversion 如图所示 我们在右侧的框
  • vw移动端布局,vue项目初始化构建

    大漠老师的vue项目vw布局 现在已经收费 1 构建项目 vue init webpack demo 之前的准备工作 像下载node啥的就不多逼逼了 2 引入 vw 布局所需要的包 npm i postcss aspect ratio mi
  • Ubuntu 16.04 安装后修改屏幕分辨率(xrandr: Failed to get size of gamma for output default)

    ubuntu 16 04 安装后分辨率只有一个选项 1024x768 使用 xrandr 命令出现错误 xrandr Failed to get size of gamma for output default 使用 cvt 命令也无法设置
  • FPGA面试真题解析(3)

    9 寄存器的Tsu 建立时间 是如何定义的 硬件逻辑实习岗 A 在时钟沿到来之后数据保持稳定的时间 B 在时钟沿带来前后数据都需要保持稳定的时间 C 在整个时钟周期数据保持稳定的时间 D 在时钟沿到来之前数据保持稳定的时间 解析 考察数字电
  • 知识蒸馏概念

    迁移学习侧重不同领域 知识蒸馏侧重不同模型 知识蒸馏模型就是把一个大的教师模型蒸馏成一个小的学生模型 教师模型会的多而且杂 体型大的网络 而学生网络小而轻量化 知识蒸馏就是模型压缩的一个手段 教师模型 学生模型 预训练的大模型 通过海量数据
  • 四象限运行模式_快速检测动车组网压中断的方法,保障高铁运行安全

    弓网离线导致的网压中断 会对动车组变流系统的长期安全可靠运行产生不利影响和潜在安全隐患 为此 北京交通大学电气工程学院 北京市轨道交通电气工程技术研究中心的研究人员张钢 郭尝君 郝峰杰 刘志刚 在2019年 电工技术学报 增刊2上撰文 提出
  • redis学习笔记

    2020最新 Redis超详细版教程通俗易懂 视频地址 https www bilibili com video BV1FZ4y1u7ny p 1 1 1Redis介绍 1由于用户量增大 请求数量也随之增大 数据压力过大 2多台服务器之间
  • Unlimited “使用GPT-4 ”!它来了!

    备注本文末尾附录注册登录过程 平台介绍 聊天机器Chat fore人front ai是一为款基于人主工智能的题聊天的机器人主平台 旨在帮菜助企 业提可以高客户服务质是量和一效率 该平款台利用自然语精言处理技术和机器致学习的算法 能够自牛动排
  • 人生本过客,何必太执着

    仓央嘉措曾在诗中写道 世间事 除了生死 哪一桩不是闲事 的确 人这一生 其实就是一场单程旅行 虽然过程未知 风景不同 但已知的是 我们都有同一个结局 很多时候 我们却放不下内心执念 执着过去的人和事 担忧当下和未来 为种种遗憾伤怀 反而忘了
  • SpringCloud-Config、Git环境搭建、服务端连接Git配置、客户端实现远程访问、远程配置实战、bootstrap.yml

    SpringCloud config分布式配置中心 前言 SpringCloud config分布式配置中心 为什么需要SpringCloud config SpringCloud config能做什么 新建Git仓库以及配置 提交修改文件
  • DC-DC电路中,PCB Layout 布局及注意事项

    在DCDC电源电路中 PCB的布局对电路功能的实现和良好的各项指标来说都十分重要 本文以buck电路为例 简单分析一下如何进行合理PCB layout布局以及设计中的注意事项 如有问题 欢迎指正 首先 以最简单的BUCK电路拓扑为例 下图
  • androidx.lifecycle.ViewModel

    相关链接 深入了解架构组件之ViewModel
  • 抓包工具Charles(二)-移动端APP抓包(设置手机代理、安装证书)

    安装好Charles之后 还只能捕获电脑的接口请求 想要抓取移动设备的APP还需要设置代理 安装证书 文章目录 一 抓包原理 二 手机设置网络代理 1 查看电脑的IP地址 local IP address 2 设置手机网络代理 1 iOS设
  • 数据结构与算法----详解二叉树的遍历(迭代、递归)

    文章目录 实现二叉树的类 前序遍历 中序遍历 后序遍历 层次遍历 总结 作者简介 大家好我是小鱼干儿 是一个热爱编程 热爱算法的大三学生 蓝桥杯国赛二等奖获得者 个人主页 https blog csdn net qq 52007481 个人
  • 老毛桃u盘装系统linux,老毛桃U盘装系统教程详细步骤

    电脑用久了 就会觉得用起来很慢 还很卡 有时还有蓝屏的现象 为了解决这一问题 通常我们都会选择重装系统 如果你还是用光盘来装系统 那么你就OUT了 今天小编讲讲U盘怎么用 老毛桃 来给电脑重装系统 老毛桃是一个多系统模式的PE操作系统 一般
  • 机器学习必学数学基础系列之概率与统计

    课程目标机器学习必学数学基础系列之大数据矩阵基础适应人群大数据 人工智能开发人员课程简介本课程囊括了机器学习理论中所需要概率部分包括概率公理及推论 条件概率 贝叶斯公式 随机变量及其概率函数 CDF pdf 常用概率分布及其均值 方差 统计
  • 虚拟机网络配置、ssh免密配置、jdk和hadoop安装、Hadoop集群配置、格式化文件系统、关闭和启动集群、UI查看集群状态

    一 虚拟机网络配置 二 SSH免密登录公能配置 二 安装jdk 三 安装Hadoop 四 Hadoop集群配置 五 格式化文件系统 六 关闭和启动Hadoop集群 七 通过UI界面查看Hadoop运行状态 1 虚拟机网络配置 mkdir p
  • Python中一些语句的简洁写法

    Python拾珍 Python 提供了不少并不是完全必需的功能 使用这些功能可以写出更简洁 更可读或者更高效的代码 甚至有时候三者兼得 当然 不使用这些功能 我们依然可以写出好代码 阅读一些开源项目 github上很常见 经常可以看到这种简
  • 博士的年薪一般是多少万?

    作者 Dr YaIRhttps www zhihu com question 546293852 answer 3035449200 中科院北京某所的土博士毕业 拿到了中科院优博 留在中科院做助理研究员 工作2年了 本人不在院士组 不在杰青
  • MD5学习总结

    1 MD5简介 MD5 即消息摘要算法第五版 是一种被广泛使用的密码散列函数 散列算法的基本原理是 进行数据 如一段文字 运算 将原始数据变为另一段固定长度的值 MD5 可以产生出一个 128位 16字节 的散列值 hash value 用