tutorial-fuckholeXORs/fuckholexors.go

72 lines
1.6 KiB
Go

package main
import "fmt"
var secretstring = []byte("fuckhole")
var secretkey = []byte("jones")
func getpadding(current byte, ByteIntStringAllTheSame []byte) string {
var max = 1
var pad = " "
for _, b := range ByteIntStringAllTheSame {
visual := fmt.Sprintf("%v", b)
if len(visual) > max {
max = len(visual)
}
}
aesthetic := len(fmt.Sprintf("%v", current))
for n := aesthetic; n != max; n++ {
pad += " "
}
return pad
}
func xorpad(input []byte, key []byte) []byte {
var keyindex = 0
var encoded = make([]byte, len(input))
println("(index) [in XOR key] -> byte")
println(" s k\n")
for index, character := range input {
if keyindex == len(key) {
keyindex = 0
}
encoded[index] = character ^ key[keyindex]
fmt.Printf("[%d] [%d] %s%v ^ %s(%v) -> %v\n",
index, keyindex,
getpadding(character, input),
character, string(key[keyindex]),
key[keyindex], encoded[index],
)
keyindex++
}
return encoded
}
func main() {
println("secret string: " + string(secretstring))
println("`->in byte form:" + fmt.Sprintf("%v", secretstring))
println("-----")
println("secret key: " + string(secretkey))
println("`->in byte form:" + fmt.Sprintf("%v", secretkey))
println("\n-------------------------------------\n")
encoded := xorpad(secretstring, secretkey)
println("\n-------------------------------------\n")
println("encoded xor result: " + fmt.Sprintf("%v", encoded))
println("\n-------------------------------------\n")
decoded := xorpad(encoded, secretkey)
println("\n-------------------------------------\n")
println("decoded xor result: " + string(decoded))
}