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学习总结 的相关文章

  • 日期格式转换工具类(线程安全)

    import java text ParseException import java time import java time format DateTimeFormatter import java time temporal Chr
  • 分布式ID生成器(雪花算法改进版)ID不重复

    snowflake是Twitter开源的分布式ID生成算法 结果是一个long型的ID 其核心思想是 使用41bit作为毫秒数 10bit作为机器的ID 5个bit是数据中心 5个bit的机器ID 12bit作为毫秒内的流水号 意味着每个节
  • 信息安全密码学:DES算法的核心 E盒、S盒、P盒

    加密密钥等于脱密密钥 或者由一个可以轻易的计算出另一个的密码体制 称为单密钥密码体制 亦或称为对称密码体制或传统密码体制 其最具代表意义的当然属于DES密码体制了 1 DES的设计背景 1973年5月 NBS 美国国家标准局 发布通告 征集
  • java远程连接linux并发送命令,两种方案比较Jsch与ganymed-ssh2

    通过Jsch连接 step 1引入jar包
  • TSDB时序数据库-OpenTSDB

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

    打造利器Qt Creator 代码todo工具的使用 前言 俗话说 工欲善其事必先利其器 工作生活中 能有一款出色易用 高效简便的工具 对提高效率 达成价值有着莫大的影响 Qt是一套C 库 封装了许多好用的模块和功能 且带有先进的GUI设计
  • HBuilder html 乱码解决,java eclipse等应当同理

    1 网上下载了一套html代码 出现乱码 一般就是编码格式问题 2 解决方式 更改编码 3 剪切所有内容 然后右下角修改编码为utf 8 4 再粘贴内容 5 访问页面
  • Git恢复本地误删文件

    转 https www cnblogs com yangshifu p 9680993 html Step 1 git status Step 2 git reset HEAD 被删除的文件或文件夹 Step 3 git checkout
  • RedisTemplate存储对象乱码解决

    SpringBoot 通过RedisTemplate存储对象时 key和Value乱码 特此记录 解决方法 import org springframework beans factory annotation Autowired impo
  • 常见加密算法实现——DES、AES、RSA、MD5

    一 对称加密 1 介绍 对称加密 加密和解密使用同一个密钥 对称加密算法 DES 3DES AES等 DES 数据加密标准 是一种使用密钥加密的块算法 3DES DES向AES过渡的加密算法 AES 高级加密标准 替代DES 对称加密的特点
  • RedisTemplate lettuce 实现分布式锁

    springboot2 x 以上使用redis时 默认使用了lettuce封装 比起jedis线程安全 import lombok extern slf4j Slf4j import org springframework data red
  • 写给小白的常见三种加密方式:MD5,对称非对称加密

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

    一 base64编码介绍 二 base64图片使用介绍 三 base64图片编码大小与原图文件大小之间的联系 四 代码实现 一 base64编码介绍 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一 Base64编码可用于
  • gitLens插件简单使用(默认上传github)

    1 安装 在vscode中的插件管理输入如下后下载 GitLens Git supercharged 2 配置 点击文件 首选项 设置 点击右上角设置小图标 3 github使用 首先仓库文件一定是要git init是git所管理的 1 在
  • UUID工具类

    import java util UUID public class Uuid public static String id32 String uuid UUID randomUUID toString uuid uuid replace
  • JSON工具类

    在实际开发中通服都是使用JSON格式数据 那么如何跟JSON打交道呢 下面就写一些JSON的常用转换工具 以及JSON数据提取 目录 阿里的FastJSON JSONObject类 JSON类 JSONArray JSONPath Json
  • VS2019安装Qt插件教程,发现下载不了问题解决

    1 打开VS 最上方工具栏中点击扩展窗口 选择管理扩展 2 在右边搜索中搜索qt出现以下界面 这时可能出现问题 再点击下载发现迟迟下载不了 或者是下载到一定地步后无法下载 再或者是下载完成后安装无反应 解决办法 点击有点的详细信息或者进入如
  • 正则表达式工具类

    在实际开发中总会使用到正则表达式匹配数据 我也是在后面查看了一些资料 下面写一个常用的正则表达式匹配集合 正则匹配模式 表示匹配字符串的开始位置 例外 用在中括号中 时 可以理解为取反 表示不匹配括号中字符串 表示匹配字符串的结束位置 表示
  • WSL无法访问网络的解决办法

    今天在用WSL的时候突然网络抽风 域名解析出了问题 apt update都用不了 网上查了很多方法 什么vEthernet的IP啊 ifconfigip啊 ip route add default啥的 都不管用 最后还是看了一下 etc r
  • 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 用