72 lines
1.6 KiB
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))
|
|
|
|
}
|