简述:
message-digest algorithm 5(信息 - 摘要算法). 经常说的 "MD5 加密", 就是它信息 - 摘要算法.
md5, 其实就是一种算法. 可以将一个字符串, 或文件, 或压缩包, 执行 md5 后, 就可以生成一个固定长度为 128bit 的串. 这个串, 基本上是唯一的.
不可逆性:
每个人都有不同的指纹, 看到这个人, 可以得出他的指纹等信息, 并且唯一对应, 但你只看一个指纹, 是不可能看到或读到这个人的长相或身份等信息.
特点
压缩性: 任意长度的数据, 算出的 MD5 值长度都是固定的.
容易计算: 从原数据计算出 MD5 值很容易.
抗修改性: 对原数据进行任何改动, 哪怕只修改 1 个字节, 所得到的 MD5 值都有很大区别.
强抗碰撞: 已知原数据和其 MD5 值, 想找到一个具有相同 MD5 值的数据 (即伪造数据) 是非常困难的.
MD5 长度
md5 的长度, 默认为 128bit, 也就是 128 个 0 和 1 的二进制串. 这样表达是很不友好的. 所以将二进制转成了 16 进制, 每 4 个 bit 表示一个 16 进制, 所以 128/4 = 32 换成 16 进制表示后, 为 32 位了.
为什么网上还有 md5 是 16 位的呢?
其实 16 位的长度, 是从 32 位 md5 值来的. 是将 32 位 md5 去掉前八位, 去掉后八位得到的.
python 代码实现
基本的 example:
- # -*- coding: utf-8 -*-
- # coding=utf-8
- import hashlib
- print("example one")
- str = "this is a md5 test"
- h1 = hashlib.md5()
- h1.update(str.encode(encoding='utf-8'))
- print("MD5 ency before:" + str)
- print("MD5 ency after:" + h1.hexdigest())
- print("example two")
- str = "this is a md5 testQQQQQQQQQQQQQQQQQQQQQQqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- h1 = hashlib.md5()
- h1.update(str.encode(encoding='utf-8'))
- 1,1 Top
- View Code
来源: http://www.bubuko.com/infodetail-2704005.html