Utoljára aktív 6 months ago

go prog which implements a rolling XOR

xor.go Eredeti
1package main
2
3import (
4 "container/ring"
5 "flag"
6 "io/ioutil"
7 "log"
8)
9
10var keyFile string
11var keyString string
12var inFile string
13var outFile string
14var keyData []byte
15var err error
16
17func init() {
18 flag.StringVar(&keyFile, "k", "key", "key file to use")
19 flag.StringVar(&keyString, "s", "", "key to use, as string")
20 flag.StringVar(&inFile, "f", "file", "file encrypt/decrypt")
21 flag.StringVar(&outFile, "o", "out", "output file")
22}
23
24func check(err error) {
25 if err != nil {
26 log.Fatal(err)
27 }
28}
29
30func main() {
31 flag.Parse()
32 if keyString == "" {
33 // load key file
34 keyData, err = ioutil.ReadFile(keyFile)
35 check(err)
36 } else {
37 keyData = []byte(keyString)
38 }
39 // setup ring buffer with key data
40 r := ring.New(len(keyData))
41 for i := 0; i < r.Len(); i++ {
42 r.Value = keyData[i]
43 r = r.Next()
44 }
45 // load encrypted data from file
46 data, err := ioutil.ReadFile(inFile)
47 check(err)
48 for i := 0; i < len(data); i++ { // foreach byte of data
49 data[i] = r.Value.(byte) ^ data[i] // xor data byte with current ring element
50 r = r.Next() // move ring forward
51 }
52 ioutil.WriteFile(outFile, data, 0700)
53}
54