文章目录

  • 前言
  • MD5
    • 长度一致性
    • 数据安全性
  • 应用场景
    • 密码保存
    • 数据签名

前言

加密算法,根据是否可逆计算出明文,分为可逆加密算法与不可逆加密算法。

这两种类型的加密算法,在网络数据请求中广泛应用,提高网络安全性。其中的可逆加密算法用于加密数据包,保证数据安全,不可逆加密算法用于签名,防止数据篡改。这篇文章介绍不可逆加密算法中的md5,以及其应用场景。

MD5

md5信息摘要算法,一种被广泛应用的密码散列函数,根据数据产生一个128位的散列值。

md5算法具有以下特点:

  • md5值长度一致,不管数据量的大小,其产生的md5长度一致。
  • 数据的一个小更改,生成的md5就会不一样,可以有效的防止数据篡改

长度一致性

s = "fdasfffffffffffasfsdddddddddddddddddddddddddddddddd"
print(hashlib.md5(s.encode("utf-8")).hexdigest())
print(hashlib.md5('11'.encode("utf-8")).hexdigest())#输出
7b7e575bd10c3fdab6b7b6e306f2daef
6512bd43d9caa6e02c990b0a82652dca

如上案例,不管是一个长度为2的数据还是长度为51的数据,通过md5计算出来的值长度都是一个128位的值。就算数据再大,通过md5计算出来,其md5的长度都会是128位。

备注:

这里输出的md5字符串长度为32,16进制,每一个字符4位,共计128位。

数据安全性

s = "1" + "qqwertyusdfghxcvbnmikmuj" * 10000
print(hashlib.md5(s.encode("utf-8")).hexdigest())
s = "2" + "qqwertyusdfghxcvbnmikmuj" * 10000
print(hashlib.md5(s.encode("utf-8")).hexdigest())#输出
0afc01e49fb2fb4041016874c23560cf
219ba5b3171553274c40c038bd3ca9bb

上面案例,两次计算md5值的数据,24W+1个字符串中,只有第一个字符串是不一样的,但是从计算出来的md5值来看,两者的md5值完全不一样。可见md5算法是可以有效的防止数据篡改的。

应用场景

不可逆的加密算法,广泛应用于网络请求和密码保存的场景下。

密码保存

每一个系统,都不可避免的需要保存用户的密码信息,只有保存了密码信息才能在用户登录时,对其用户名密码进行校验,来完成认证。但是在数据库中明文保存密码是一大忌,为什么呢?下面简单举出两个例子说明一下:

1)2011年12月,CSDN网站备份数据库遭黑客攻击,600万用户的登录名、密码数据被窃取,之后天涯、世纪佳缘、走秀等多家网站的用户数据库也在网上被曝光。

2)2017年11月,媒体发布消息称,趣店百万学生的数据疑似外泄,泄露的数据出包括借款金额、滞纳金等金融数据外,甚至还包括学生父母电话、男女朋友电话、学信网账号密码等隐私信息。据称,此次数据泄露事件有可能是内鬼所为,内部人员主动泄露这些数据以进行报复。

所以利用不可逆的加密算法保存密码信息,可以有效的保护用户的数据安全。虽然现在大部分的系统都不再保存明文密码了,但是我们在平常的生活中,还是可以提高下面的做法来进一步提高自己的信息安全:

  • 密码复杂度,不要太低。防止通过密码本暴力破解
  • 不要所有系统设置相同密码,防止撞库现象的发生(黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户)

数据签名

为了防止网络请求,被恶意修改。为了验证消息体的合法性,很多系统都使用不可逆算法来进行消息体签名。客户端发送网络请求时,根据约定的机制,通过不可逆算法生成消息体的签名,并将计算的值放入消息体中,一并发送给服务端。服务端获取到消息体之后,可用以验证消息体的真实性。

常见的消息体签名:

# md5
def signature(parameters):sorted_parameters = sorted(parameters.items(), key=lambda parameters: parameters[0])query_string = ''for (k, v) in sorted_parameters:query_string += k + "=" + str(v) + "&"query_string = query_string[:-1]return hashlib.md5(query_string.encode("utf-8")).hexdigest()print(signature({"name": "test","password": "tteesst"
}))

如上图,通过将消息体排序之后,拼接的方式再进行不可逆加密计算的方式,获取到消息体的签名。然后在发往服务端的数据中,除了原有的消息体之外,还需要携带签名值。服务端会通过相同的方式,去计算消息体的签名,并与客户端发送的签名值进行匹配,如果匹配不通过的话,将视为消息体被篡改。

不可逆加密算法-MD5相关推荐

  1. 不可逆加密算法(MD5)

    第一.首先要了解什么是不可逆加密算法 不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是***无法被解密***的,只有重新输入明文,并再次经 ...

  2. 不可逆加密算法MD5 SHA与可逆加密算法Base64

  3. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA

    1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...

  4. 加密算法—MD5、RSA、DES

    最近因为要做一个加密的功能,简单了解了一下加密算法,现在比较常用的有三个加密算法MD5加密算法.RSA加密算法.DES加密算法.       MD5加密算法     定义:MD5算法是将任意长度的&q ...

  5. 加密算法-MD5算法

    在一些初始化处理后,MD5以512位分组来处理输入文本,每一分组又划分为16个32位子分组.算法的输出由四个32位分组组成,将它们级联形成一个128位散列值. 首先填充消息使其长度恰好为一个比512位 ...

  6. 乐鑫Esp32学习之旅 22 讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等,附带Demo;

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  7. 常用的加密算法(md5,sha1,base64加密解密)使用

    import org.apache.commons.codec.digest.DigestUtils; import java.util.Base64; import java.util.Scanne ...

  8. 3个著名加密算法(MD5、RSA、DES)的解析

    MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来.     ...

  9. 用不可逆算法MD5进行加密后,如何进行登录验证

    一.为什么要选择MD5加密算法进行数据加密 加密对任何系统来说,都是尤为重要的.无论是网站还是时下火热的APP,只要涉及到用户的注册和登录,都要考虑用户登录信息的安全问题.时下流行的加密算法有很多,选 ...

  10. 认证过程中常用的加密算法MD5、Base64

    在编程过程中,MD5加密算法和Base64编码都是十分常用的,那么MD5和Base64编码有什么作用和区别呢? 一.MD5 1)什么是MD5? MD5消息摘要算法(英语:MD5 Message-Dig ...

最新文章

  1. 解读 | 2019年10篇计算机视觉精选论文(上)
  2. c++ 读文件_C语言处理文件基础知识:文件、流和键盘输入
  3. Fully Convolutional Networks
  4. postman接口测试系列:接口参数化和参数的传递
  5. python PIL.Image获取图像像素时, 图像的原点及x,y的方向
  6. 介绍一个非常实用的Visual Studio Code扩展 - indent-rainbow
  7. 更了吗?Windows 11 22000.184 推送
  8. 设计模式读书笔记-----备忘录模式
  9. Mysql数据库使用总结
  10. docker-compose命令介绍和使用【官方英文文档翻译】【附加案例】
  11. 北京理工大学计算机学院乔磊,邸慧军_北京理工大学计算机学院
  12. 灵活的javaScript
  13. 极验滑动验证码的识别
  14. html页面获取扫码枪参数,js获取扫码枪输入数据的方法
  15. 全景图航拍的方法,制作航拍全景图的步骤
  16. OpenWRT/Linux多WAN带宽叠加使用iptables标记策略路由负载均衡
  17. angularJs监控页面加载完毕
  18. Centos7 出现xxx不在sudoers文件中的解决方案
  19. Python 北京二手房成交数据分析过程
  20. 3D建模软件功能解析之Maya篇

热门文章

  1. Bitvise ssh client工具
  2. Windows10系统删除文件夹“找不到该项目”强删方法
  3. informatic动态变量的创建和使用
  4. apdu 移动sim_SIM卡APDU指令
  5. Django开发收银系统二
  6. 微信小程序布局技巧(二)
  7. java无法定位程序点_无法定位程序输入点是什么意思
  8. Android平台车牌识别SDK
  9. dnf服务器文件夹,有效提升DNF游戏稳定性 缓存文件清理教学
  10. Mybatis学习笔记(完结)