CRYPTO-MD5

这是昨天WHUCTF比赛的一道题目,本属于crypto,其实和crypto没多大关系,

比赛时其实差不多有这种思路了,但不相信自己,就没这样做下去,回来之后,照做了,果然是这样

链接:http://pan.baidu.com/s/1ge2axLD 密码:adlo

程序主体思路

flag400.txt是自己的文件 里面就是要输的flag flag长度为32 操作是每次把 enjoy WHU_CTF2016!的一个字符和flag链接 算他们的md5值 再将md5和flag按位异或

得到长度为32的output  再算base64即为enc400.txt里面的文本

这里涉及到md5加salt的这样一种加密方式,有兴趣的可以了解一下

md5加salt的强度肯定是爆破不了的,只能在后面的按位异或找思路

思路:

flag范围是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789{}_

md5是abcdefghijklmnopqrstuvwxyz0123456789

可以对这里进行爆破

自己写的python脚本:

import base64
base=open(‘enc400.txt‘,‘r‘).read().split()

for i in range(len(base)):
    base[i]=base64.b64decode(base[i])

a=[[0 for i in range(len(base))]for j in range(32)]

for i in range(32):
    for m,n in enumerate(base):
        a[i][m]=hex(ord(n[i]))

print a

b=‘abcdefghijklmnopqrstuvwxyz0123456789‘
c=‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789{}_‘

for k in range(32):
    for i in c:
        for m,n in enumerate(a[k]):
            d=chr(int(n,16)^ord(i))
            if d not in b:
                break
            if m==17:
                print k,i

最后的flag是:yo_you_are_angry_i_am_excited_yo

时间: 2024-11-09 02:38:47

CRYPTO-MD5的相关文章

node crypto md5加密,并解决中文不相同的问题

在用crypto模块时碰到了加密中文不相同的问题,多谢群里面@蚂蚁指定 1:解决中文不同的问题 function md5Pay(str) { str = (new Buffer(str)).toString("binary"); var ret = crypto.createHash('md5').update(str).digest("hex"); return ret;} 2:正常字符串加密 function md5(str) { var ret = crypt

nodejs -- crypto MD5签名

MD5使用方法: const crypto = require('crypto'); var obj = crypto.createHash('md5'); // 可多次调用 update obj.update('123456'); obj.update('789'); console.log(obj.digest('hex')); sha256 使用方法,可将‘md5’  直接改成 'sha256' 就可以. 原文地址:https://www.cnblogs.com/gzh529/p/1059

计算文件的MD5值(Java & Rust)

Java public class TestFileMD5 { public final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b",

go练习5--生成md5

import "crypto/md5" import "encoding/hex" //go 生成 md5 func T4_1() { m := md5.New() m.Write([]byte("123456")) println(hex.EncodeToString(m.Sum(nil))) }

Golang签名系列之MD5

先从个简单点的,也是用的比较多MD5加密开始,不多说直接上代码 package sign import "crypto/md5" type MD5Client struct { } var MD5 = MD5Client{} func (this *MD5Client) Encrypt(plantext []byte) []byte {     result := md5.Sum(plantext)     return result[:] } /* 给要加密的信息加把盐 */ fun

golang 的md5加密

先看实现代码: package main import (     "crypto/md5"     "encoding/hex"     "fmt" ) func main() {     h := md5.New()     h.Write([]byte("123456")) // 需要加密的字符串为 123456     cipherStr := h.Sum(nil)     fmt.Println(cipherStr)

golang md5

package main import ( "crypto/md5" "encoding/hex" "fmt" "io" ) // 官网的例子:http://golang.org/pkg/crypto/md5/ func main() { h := md5.New() io.WriteString(h, "123456") // 需要加密的字符串为 123456 fmt.Println(h.Sum(nil)

Golang语言之JSON md5

package main import ( "encoding/json" //自带的json工具 "fmt" ) //github.com/pquerna/ffjson/ffjson // 这个json工具,比自带的json效率要高很多 // 而且接口,完全一样, type worker struct { Name string `json:"worker_name"` //转换成json格式时,key就是worker_name Sex str

go语言之JSON与md5值

go语言之JSON与md5值 一.Json是什么? 是一种轻量级的数据交换语言,用于数据交换.Json由于比XML更小.更快.更易解析,以及浏览器的内建快速解析支持,使得其更实用于网络数据交互.目前我们看到很多的开放平台,基本上都是采用了JSON作为他们的数据交互的接口.go语言提供了内置的encoding/json 标准库,在github上提供了更快的json标准库,github.com/pquerna/ffjson/ffjson 二.JSON数据的编码和解码 编码函数: func Marsh

golang 中的md5 、hmac、sha1算法的简单实现

package main import ( "crypto/hmac" "crypto/md5" "crypto/sha1" "encoding/hex" "fmt" ) func Md5(data string) string { md5 := md5.New() md5.Write([]byte(data)) md5Data := md5.Sum([]byte("")) return