Skip to content

Instantly share code, notes, and snippets.

@ykm11
Last active June 3, 2019 10:57
Show Gist options
  • Save ykm11/96f2de6e23c99dd256747d0a04c8bc98 to your computer and use it in GitHub Desktop.
Save ykm11/96f2de6e23c99dd256747d0a04c8bc98 to your computer and use it in GitHub Desktop.
I hate PoW on CTF
package main
import (
"fmt"
"os"
"hash"
"strings"
"crypto/MD5"
"crypto/SHA1"
"crypto/SHA256"
"crypto/SHA512"
)
var (
chars string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
)
func Usage() {
fmt.Println("Usage PoW")
fmt.Println("$ ./Pow TARGET HASH-FUNCTION")
fmt.Println("")
fmt.Println("Hash Funcionts:")
fmt.Println("MD5, SHA1, SHA224, SHA256, SHA384, SHA512")
fmt.Println("")
fmt.Println("Example:")
fmt.Println("\t$ ./PoW 0da3 md5\n")
}
func GetHash(val, algorithm string) []byte {
var hashData []byte
var hasher hash.Hash
switch algorithm {
case "md5", "MD5":
hasher = md5.New()
case "sha1", "SHA1":
hasher = sha1.New()
case "sha224", "SHA224":
hasher = sha256.New224()
case "sha256", "SHA256":
hasher = sha256.New()
case "sha384", "SHA384":
hasher = sha512.New384()
case "sha512", "SHA512":
hasher = sha512.New()
default:
hasher = sha256.New()
}
hasher.Write([]byte(val))
hashData = hasher.Sum(nil)
return hashData
}
func PoW(target, algorthm string) string {
var str, hashString string
for _, ch1 := range(chars) {
for _, ch2 := range(chars) {
for _, ch3 := range(chars) {
for _, ch4 := range(chars) {
str = fmt.Sprintf("%s%s%s%s",
string(ch1), string(ch2), string(ch3), string(ch4))
hashString = fmt.Sprintf("%x", GetHash(str, algorthm))
tmp := hashString[len(hashString)-len(target):]
if strings.Compare(tmp, target) == 0 {
return str
}
}
}
}
}
return ""
}
func main() {
if len(os.Args) < 3 {
Usage()
os.Exit(1)
}
fmt.Println(PoW(os.Args[1], os.Args[2]))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment