-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
95 lines (85 loc) · 1.97 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"crypto/aes"
"crypto/cipher"
"encoding/pem"
"fmt"
"io/ioutil"
"log"
"math/rand"
)
const (
keyFile = "aes.key"
encryptedfile = "aes.enc"
)
var abc = []byte("1234567812345678")
func rKey(filename string) ([]byte, error) {
key, err := ioutil.ReadFile(filename)
if err != nil {
return key, err
}
block, _ := pem.Decode(key)
return block.Bytes, nil
}
func cKey() []byte {
genkey := make([]byte, 16)
_, err := rand.Read(genkey)
if err != nil {
log.Fatalf("failed to read key: %s", err)
}
return genkey
}
func sKey(filename string, key []byte) {
block := &pem.Block{
Type: "AES KEY",
Bytes: key,
}
err := ioutil.WriteFile(filename, pem.EncodeToMemory(block), 9854)
if err != nil {
log.Fatalf("Failed tio save the key %s: %s", filename, err)
}
}
func aesKey() []byte {
file := fmt.Sprintf(keyFile)
key, err := rKey(file)
if err != nil {
log.Println("Create a new AES KEY")
key = cKey()
sKey(file, key)
}
return key
}
func createCipher() cipher.Block {
c, err := aes.NewCipher(aesKey())
if err != nil {
log.Fatalf("failed to create aes %s", err)
}
return c
}
func encryption(plainText string) {
bytes := []byte(plainText)
blockCipher := createCipher()
stream := cipher.NewCTR(blockCipher, abc)
stream.XORKeyStream(bytes, bytes)
err := ioutil.WriteFile(fmt.Sprintf(encryptedfile), bytes, 0644)
if err != nil {
log.Fatalf("writing encryption file %s", err)
} else {
fmt.Printf("Message encrypted: %s\n\n", encryptedfile)
}
}
func decryption() []byte {
bytes, err := ioutil.ReadFile(fmt.Sprintf(encryptedfile))
if err != nil {
log.Fatalf("Reading encrypted file %s", err)
}
blockCipher := createCipher()
stream := cipher.NewCTR(blockCipher, abc)
stream.XORKeyStream(bytes, bytes)
return bytes
}
func main() {
var plainText = "AES is now used Worldwide"
encryption(plainText)
fmt.Printf("Decrypted Msg : %s", decryption())
}