签名算法-MD5

一、什么是MD5

MD5 (Message Digest Algorithm 5,消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数

MD5的功能,简单而言,是将一段明文作为输入,输出一串固定长度的字符串,即此段明文的签名(或摘要),并保证输入不同的明文,其输出的签名截然不同(有极低概率失效)。

二、MD5算法

MD5 算法流程

MD5的算法可以简述如下:

  1. 若明文长度不是512位的整数倍,则填充字符至满足此条件,然后将明文按512位的长度分块
  2. 设置128位的初始秘钥,一般使用算法库默认值,按照顺序对一块数据进行非线性运算,生成一个128位的结果,作为下一次计算的输入部分,依次迭代,直到最后输出一个128位的签名

三、代码实现

现有主流语言都有对应的MD5实现,在Python中Demo如下:

import hashlib

# 待加密信息
text = 'hello world'

# 创建md5对象
md5 = hashlib.md5()
#更新hash对象的值
md5.update(text.encode("utf-8"))

print('MD5 sign=:' + md5.hexdigest())

四、实际应用

情景1:服务器端密码存储

很久前安全意识还很淡薄,不少服务器密码是明文保存于数据库中的。一旦攻击者成功入侵到数据库,就直接取得账号和密码
随着时间发展,开发者认识到密码明文保存的脆弱性,采用加密保存密码。此阶段不存储用户的原始密码,而是存储其密码的签名。用户登录时只需要计算其输入密码的签名与服务器端保存的签名是否一致即可。这样,即使泄露了签名值,攻击者也无法直接得到原始的密码

情景2:消息防篡改

上面MD5的算法中初始由算法默认设置。如果直接使用的话,是不安全的。比如我发送一段消息,并将其MD5签名发送出去。但是被第三方拦截了,他修改了消息,重新进行MD5签名。那么接收方无法判断其是否消息是否被修改了
一般而言,是发送方和接收方一同约定一个密钥,在发送消息是将密钥加在消息中进行签名。第三方没有密钥,重新生成的签名是不同的
此外,有的时候会在消息后面加上一无意义的随机字符串,是得生成的MD5更加随机,不易被破解

参考链接

MD5算法原理介绍与C++实现
信息摘要算法之一:MD5算法解析及实现
Python 中 MD5 加密
谈谈密码安全:服务端密码保存

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,792评论 0 6
  • 在很多时候在跟第三方做数据交互的时候,对方都会提供给我们签名密钥signKey,并且要求我们传入签名 这种做法非常...
    smallThree1阅读 2,624评论 0 0
  • 前言 《图解密码技术》一书介绍了很多关于密码的知识,通读一遍需要不少时间。为了方便学习,我对书中关键的部分进行了总...
    咖枯阅读 7,301评论 1 25
  • 为了防止我们的数据泄露,我们往往会对数据进行加密,特别是敏感数据,我们要求的安全性更高。下面将介绍几种常用的加密算...
    Chauncey_Chen阅读 2,962评论 0 20
  • 寂寞日子里开怀大笑 我的孤独变得喧闹 听不清夜的低吟 只当做一阵聒噪 彷徨的人仍在彷徨 街角霓虹灯又亮到太晚 盼一...
    夜半空腹阅读 346评论 1 10