Skip to content

Instantly share code, notes, and snippets.

@Witawat
Created May 31, 2019 04:44
Show Gist options
  • Save Witawat/93974049f13369e6d6c12407265dc9af to your computer and use it in GitHub Desktop.
Save Witawat/93974049f13369e6d6c12407265dc9af to your computer and use it in GitHub Desktop.
Finding the valid order of a secret message
package main
import (
"github.com/gitchander/permutation"
"encoding/hex"
"crypto/sha1"
"crypto/hmac"
"strings"
"fmt"
"os"
)
func main() {
secretKey := "9LXAVCxcITaABNK48pAVgc4muuTNJ4enIKS5YzKyGZ"
finalHash := "77cc91113efbcea99ea0d5b5450f3d159694d6a2"
params := []string{"bb0b4a65077f7385", "09XXXXXXXX", "m8J9IpbfSBZY3Kc4AYhUMriZrZa1jqZT5EdJp9LJFcv/OAaZagEAAA==", "123456", "ABCD", "1557465220750", "mobile"}
byteFinalHash, _ := hex.DecodeString(finalHash)
prmt := permutation.New(permutation.StringSlice(params))
fmt.Println("Brute-forcing...")
for prmt.Next() {
secretMessage := strings.Join(params[:], "|")
mac := hmac.New(sha1.New, []byte(secretKey))
mac.Write([]byte(secretMessage))
digest := mac.Sum(nil)
if (hmac.Equal(byteFinalHash, digest)) {
fmt.Printf("\nFound a message pattern: %s\nKey: %s\nHash: %s\n", secretMessage, secretKey, hex.EncodeToString(byteFinalHash))
os.Exit(0)
}
}
fmt.Println("Sorry, no pattern found")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment