MD5的应用场景以及MD5 32位和16位的区别

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

PS:写这篇文章的本意是把我在工作中使用的MD5加密技巧分享出来,和大家一起交流,可能应为水平有限会有遗漏之处望大家包含,也请大家提出建议我会进一步完善.

1.MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
根据以上的特定我们能总结出几个根据以上特点衍生出来可以供我们使用的特性:

1.方便存储:MD5加密出来都是32位的字符串,能够给定固定大小的空间存储,传输,验证
2.文件加密:MD5运用在文件加密上很有优势,应为只需要32为字符串就能对一个巨大的文件进行验证完整性
3.不 可 逆:MD5加密出来只会截取末尾32位,具有良好的安全性,如果是对于参数加密很难伪造MD5
4.加密损耗低:MD5加密对于性能的消耗微乎其微(我获得的结果是:0.001毫秒)
2.实际上需要如何应用呢
我在实践中常常会用到的MD5校验加密一般运用场景:用户密码,请求参数,文件校验

2.1.用户密码
对于用户密码加密最高境界就是:别人获得你数据库的用户资料别人也没有办法获知密码.要达到就要有一套复杂的加密规则,一般常用的规则比如:

MD5(MD5(用户名+用户密码)+MD5(KEY+项目名+公司名)) 这样可以避免和别人碰库不排除别人用MD5来攻击你的服务器来匹配.

当然还可以自定很多种加密方法,就算知道加密方法也几乎无法去推送出用户原密码是什么

2.2.请求参数校验
都与服务器来言排除系统问题最大的问题就是害怕请求被拦截,拦截修改之后就有很多漏洞的可能性了

为了避免被拦截,参数被修改这种文件的常用方法就是对请求参数进行校验,就算拦截了请求参数修改了只要模拟不出MD5加密出来的值,在服务器过滤器直接就会进行拦截.

我这边推荐的请求校验方法在传递参数的时候带上 MD5值 随机数 时间戳 当然这几个都是由客户端生成 MD5=MD5(随机数+时间戳+MD5(KEY+公司名+项目名)) 当然这个规则也是可以定制的

请求参数在服务器拦截器就用客户端传递过来的 随机数 时间戳 来做校验如果不通过就不让继续访问(在这里的随机数 时间戳在后面的请求安全请求唯一性验证中会起到很大的作用所以建议保留)

2.3文件校验
当然对于一些图片已经一些很小很小的文件来说可以不用MD5校验应为基本上都是一次请求就完成了上传,而且显示的时候也不需要验证图片完不整.

但是如果是遇到了大文件上传MD5 就起到作用了,当然不是吧一个几个G 的文件一次性上传使用MD5校验,这边100%会失败 就算传递到服务端了 这个时间是不能被接受的 ,而且服务器最好是对请求做好限制(以后会开一篇来单独探讨文件上传的问题)

我们对于大文件上传的处理方式是进行分片上传,也就是所谓的断点续传,里面的实现机制

如果有一个5MB的文件 客户端把它分割成5份 1MB的文件 在上传的时候 上传两个MD5值 一个是当前上传的片1MB文件流的MD5 还有一个就是拼接之后的MD5(如果现在上传的是第二片 这个MD5就应该是第一片加上第二片的MD5)通过这样的方式能保证文件的完整性

当如果文件传到一半断了,用户换了台机器传 通过验证文件MD5 值就可以得知用户已经传到了第几片 就可以告诉用户从第几片开始传递 就解决了这个问题

3.总结:
在不知不觉中MD5校验早已经运用到我们生活中的点点滴滴,无时无刻不在使用者MD5.通过以上的例子说明了MD5在我们服务器开发安全中扮演着不可替代的角色,在日常的开发中使用MD5校验技术可以有效的避免莫些安全性的问题.

关于MD5 32位和16位的区别
有人说md5,128位,32位,16位,到底md5多长?

md5的长度,默认为128bit,也就是128个0和1的二进制串。

这样表达是很不友好的。

所以将二进制转成了16进制,每4个bit表示一个16进制,

所以128/4 = 32 换成16进制表示后,为32位了。

为什么网上还有md5是16位的呢?
网上有很多帖子,md5 32位 16位 加密 区别。

仔细观察admin生成的32位和16位的md5值……

	查询结果:

	md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3

	md5(admin,16) = 7a57a5a743894a0e

看出来了吧!

其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

MD5加密返回32密文字符串 项目中需要调用其他系统的 api 接口,接口使用的是按一定规则生成 MD5 密文作为签名来进行身份验证,本文仅记录 32 MD5 密文的生成方式,仅供参考。2、对构造的签名因子执行md5_32算法,sign=uppercase (md5_32(s))得到签名。1、构造签名因子:将Headers除"sign"外的所有参数按key进行字!2、构造签名因子:将第1步中排序后的参数(key=value)用&拼接起来。如有错误的地方欢迎指出纠正。 阅读详情

相关推荐

MD5加密的1632到底差在哪?别再傻傻分不清了!

本文深入解析了MD5加密中1632密文的本质区别32密文是MD5算法128二进制摘要的完整十六进制表示,而16密文则是从中截取中间部分的结果,信息量减半。文章重点阐述了16版本因搜索空间骤降而带来的安全风险,并探讨了其历史兼容性与适用场景,提醒开发者谨慎使用。

echo99的专栏 695

Java实现32MD5加密:从原理到API签名实战

本文详细介绍了Java实现32MD5加密的原理与实践,从基础加密方法到API签名实战,涵盖了3216MD5区别、生产环境增强方案及常见问题排查。特别适用于开发者在API签名、数据保护等场景中的应用,提升数据安全性。

weixin_29232507的博客 278

MD5加密的1632到底有什么区别?看完这篇别再混用了

本文详细解析了MD5加密算法中1632的本质区别应用场景16MD5实际上是32MD5的部分截取,信息量安全性较低,适用于非安全场景如短标识生成;而32MD5提供完整散列值,但仍存在安全风险。文章还提供了JavaPython的代码示例,并推荐了安全的现代哈希算法替代方案。

ansible6ops的博客 197

2.请求安全-- MD5的必要性以及实际应用场景

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34242331的博客 430

说说 MD5 加密后的类型(1632区别

MD5 加密后的数一般为两种,16 32 16 实际上是从 32 字符串中,取中间的第 9 到第 24 的部分,用 Java 语言来说,即: str.substring(8, 24); MD5 加密后的字符串又分为大写与小写两种。 所以一个 “123456” 字符串,MD5 加密后的结果类型有这些: ...

读万卷书,行万里路 5万+

MD5加密(2)

  1:MD5以前在asp时代常用的MD5算法好象是从动网流出来的,后来大家都用它,基本上有两种,区别md5.asp的结尾部分 MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))MD5=LCase(WordToHex(b) & WordToHex(c))分别对应3216加密方式

FANET 847

MD5加密实践:3216哈希值生成

MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,可以产生出一个12816字节)的散列值(hash value),用于确保信息传输完整一致。MD5算法最初由罗纳德·李维斯特(Ronald Rivest)于1991年设计,目的是取代原有的MD4算法。尽管MD5安全性上不如后来的算法,比如SHA-256,但由于其高效性简易性,它在许多应用领域中仍然被广泛使用。

weixin_36019375的博客 1769

JAVA对字符串进行32MD5加密

public static void main(String[] args) { String s ="202111012231046012000000111101705104827"; for (int i = 0; i <50 ; i++) { System.out.println( EncodeByMD5(s).toUpperCase()+" 长度"+EncodeByMD5(s).toUpperCase().length()); } } /**

学习 记录 总结 分享 9841

iOS MD5基础知识

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个12816字节)的散列值(hash value),用于确保信息传输完整一致。

gcs的博客 1092

md532加密16加密有什么区别

16MD5就是取32的中间16 如此而已...... MD5(123,32) = 202cb962ac59075b964b07152d234b70 MD5(123,16) = ac59075b964b0715

zz_xyz的博客 591

md5AES有什么区别,各自有什么优势特点

md5AES经常应用于信息安全领域,这两者虽然都是常用的算法,但是它们之间却有着很大的区别。简单来说,md5不是加密算法,AES是对称加密算法。那么,md5AES具体有哪些区别,各自又有什么优势特点?

ITduo的博客 3129

MD5 加密算法详细介绍

大家好,我们现在来讲解关于加密方面的知识,说到加密我认为不得不提MD5,因为这是一种特殊的加密方式,它到底特殊在哪,现在我们就开始学习它 全称:message-digest algorithm 5 翻译过来就是:信息 摘要 算法 5 加密摘要,是不一样的 加密后的消息是完整的;具有解密算法,得到原始数据; 摘要得到的消息是不完整的;通过摘要的数据,不能得到原始数据; 所以,当看到很多...

Jadeon 3万+

MD5算法

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、各类手册,如若侵权请告知,马上删帖致歉。 目录一、介绍二、算法处理三、应用场景四、公开的 MD5 Message-Digest Algorithm代码五、修改后的应用代码 一、介绍 MD5消息摘要算法,英文全称:Message-Digest 5 Algorithm,是一种被广泛使用的密码散列函数,可以产生出一个12816字节)的散列值(hash value),用于确保信息传输完整一致

夏沫的杂物间 9321

python3中md5base64的使用

目录 1. MD5简介 2. base64简介 3. python3实现MD5加密 4. python3实现base64(反)序列化 1. MD5简介 MD5是一种不可逆加密技术,常用在密码加密、文件验证等场景; 密码加密:网站注册的密码,需要加密后才可以存入后台数据库中;比如,用户不希望银行后台管理员知晓自己的银行账户密码; 密码源码经过固定的MD5算法计算出固定的MD5值,用户...

marinxue的博客 1619

MD5简介

一、概述 MD5(Message-Digest Algorithm 5),即消息摘要算法第五版,是一种被广泛使用的密码散列函数。散列算法的基础原理是:将数据(如一段文字)运算,变为另一段固定长度的值。 MD5 可以产生出一个12816字节)的散列值(hash value),用于确保传输的信息完整一致。 MD5 由美国密码学家 Ronald Linn Rivest 设计,于1992年公开,用以取代 MD4 算法。MD5 算法的程序在 RFC 1321 中被加以规范。 二、原理 MD5将整个文件当做一个大文

qq_44796643的博客 2860

关于指纹加密算法_MD5加密

MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密解密技术上,它可以说是文件的“数字指纹”。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被“篡改”过。

sinat_32176313的博客 4809

数据安全MD5、SHA-1、CRC32区别

php中CRC32的用法: crc32 — 计算一个字符串的 crc32 多项式 生成 string 参数的 32 循环冗余校验码多项式……: 这句话从英文翻译过来的,不正确,准确的说应该是这么理解: 以32循环冗余校验多项式算法,来计算一个字符串,返回一个(可能带符号的)整数。 使用方法: 这个函数的功能类似于md5算法、sha1算法加密。这个函数的使用过程中,需

LVXIANGAN的专栏 3785

MD5与SHA-256

md5与sha256

hanpca的博客 3035

md5加密

一、js的MD5加密 在这里给大家介绍一种在前端JS中的MD5加密算法(因为要匹配的后台数据是MD5加密后的字符串,所以可以在JS中也用MD5加密。MD5是不能解密的加密算法) MD5共有6种加密方法: 1,  hex_md5(value) 2,  b64_md5(value) 3,  str_md5(value) 4,  hex_hmac_md5(key, data) 5,  b6...

pyj_yln的博客 2740
上一篇: 理解ConcurrentHashMap
qq_42410894
博客等级 码龄8年 0粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值