hash爆破&&base换表
1.hash函数
hash函数是一类函数的统称,这类函数的输入是任意的二进制数据,输出是固定长度的二进制数据,这类函数具有如下特点:
单向性:由输入计算得到输出是简单迅速的,而由输出反推出输入在数学上讲是不可行的
碰撞约束:寻找到两个不同的输入,具有相同的输出是极为困难的
满足这些特点的函数均可称为hash函数。将某数据作为hash函数的输入,计算得到输出,习惯上将这一输出称为该数 据的hash值。
hash函数的一大作用便是安全地存储密码,不直接保存密码(也就是不存储明文的密码),而是保存密码的hash值,验证时只需再次计算输入的密码的hash值,与保存的密码的hash值相比较便可得知密码是否正确。由于hash函数的单向性与碰撞约束的特点,攻击者即使拿到了密码的hash值,也难以知道密码本身。
虽然由密码的hash值直接计算密码本身从数学上讲就是不可行的,但我们知道hash函数由输入计算得到输出是简单迅速的,通过不断尝试获得hash值对应的输入的操作就被称做爆破。
还有hashcat的使用,详细请看这篇文章:
https://blog.werner.wiki/use-hashcat-crack-all-kinds-of-hash/
2. sha1爆破-buu-CrackRTF
一共有两次解密,之前做的时候由于不会爆破直接动调把第一次跳过去了,这次只记录第一次解密过程
import hashlib
flag = "@DBApp"
for i in range(100000,999999):
c = str(i) + flag
s = hashlib.sha1(c.encode())
x = s.hexdigest() #换成十六进制数(小写)
if "6e32d0943418c2c33385bc35a1470250dd8923a9" in x:
print(c)
2. mrctf-re签到-base换表
import base64
import string
str1 = "tvjdvez7D0vSyZbnzv90mf9nuKnurL8YBZiXiseHFq=="
string1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))
# maketrans() 函数用于创建字符映射的转换表
# translate() 用于转换两个表
# base64.b64decode base64解密