身份证MD5解码
题目内容
需要猜测身份证号码,已经知道md5编码为"48ef223d1f70475f08e7206b9f36ed9d"
,根据其他题目信息得到身份证号码为51xxxx19xx0728xx10
,共有8位不知道的数字。
具体解题步骤
1. MD5
作用:密码保护 数据校验 文件秒传 数字签名。
MD5编码最后得到的密码长度保持不变,均为16字节
编码规则:
- 首先进行补位使文件长度变为
N*512+448
,补位规则为补充1000000...
,剩下的64位为数据的长度; - 准备四个标准幻数(每一个都是4字节)为:
1
2
3
4A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476 - 处理数据
将原始数据每512bits为一个分组 (这就是前面要求填充到512整数倍的原因),对每组分别进行处理,进行一系列的逻辑操作,得到最终四个标准幻数,四个标准幻数即为最终输出编码。
2. 解题
思路:md5不可以进行逆向解析,简单的遍历即可,共有八位模糊,每两位为一组进行循环尝试,做一个四层嵌套循环
基础:
进行md5编码的代码块:
1 | hash_object = hashlib.md5(string4.encode()) # 将字符串编码并进行 MD5 加密 |
注:考试环境下,如何在python中寻找帮助help('hashlib')
代码:
1 | import hashlib |