MD5加密

概念

MD5算法,是一种被广泛使用的加密方法,用于产出一个128bit的哈希值(hash value)。

功能

输入任意长度的信息,输出128bit的信息。一般情况下是32位长度的16进制类型字符串。

特点

1.不可逆性:MD5将原文转换为密文,但是无法反过来得到原文。
2.一个MD5值理论上可以对应多个原文,因为MD5的取值是有限的,但是原文的取值是无限的。

在Python中实现MD5加密

引入hashlib库,经过一系列函数编码将任意长度的数据转换为一个MD5值。

# md5加密算法
import hashlib

first = 'this is a string'

def hash_md5(md5): # 创建一个MD5加密的函数
    data = md5 # 要加密的信息

    a1 = hashlib.md5() # 创建md5对象
    a1.update(data.encode(encoding='utf-8')) # 更新md5对象的值。值为要加密数据的编码
    # str.encode([encoding="utf-8"][,errors="strict"])
    # str为要编码的字符串;encoding表示编码格式,默认为utf-8;error指定错误处理方式,默认strict为不兼容就报错。

    a1 = a1.hexdigest() # 返回十六进制的哈希值
    #a1 = a1.digest() # 返回二进制的哈希值

    print(a1)

hash_md5(first) # 调用函数

PHP中的MD5

语法

string md5( $str, raw)

  1. str为需要计算的字符串。
  2. raw参数可选,指定输出格式。
    true为返回二进制格式,false为返回十六进制格式。

绕过方法

科学计数法(0e绕过)

  1. md5()遇到公式,会先运算再转换为MD5值,导致0e头的数字字符串都会被计算为0,得到的MD5值也都相同。因此碰到比较md5(a)==md5(b),可以给a,b赋值为0e开头的数字字符串。
  2. 也可以输入 MD5值为0e开头的数字字符串 的被转换字符串,达到MD5值的计算结果都为0的效果,使得md5(a)==md5(b)
一些MD5值为0e开头的字符串。
QNKCDZO   => 0e830400451993494058024219903391
240610708 => 0e462097431906509019562988736854
s878926199a => 0e545993274517709034328855841020
s155964671a => 0e342768416822451524974117254469
s214587387a => 0e848240448830537924465865611904
s214587387a => 0e848240448830537924465865611904

数组绕过

md5()不能处理数组,数组会返回null。
因此在遇到强比较md5(a)===md5(b)时,可以传参a[]=1&b[]=2。当然弱比较时也可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值