-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmcryptzero.go
More file actions
117 lines (105 loc) · 2.14 KB
/
Copy pathmcryptzero.go
File metadata and controls
117 lines (105 loc) · 2.14 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package mcryptZero
import (
"encoding/base64"
"math/rand"
"time"
)
var (
randomx *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
)
func roR(b byte) byte {
if (b % 2) == 0 {
return b >> 1
}
return (b >> 1) + 128
}
func roL(b byte) byte {
if b < 128 {
return b << 1
}
return (b << 1) + 1
}
func encode8(d, k byte) byte {
for i := 0; i < 8; i++ {
if (k & 128) == 0 {
d = roL(d) + 4
} else {
d = roL(d) - 3
}
k = k << 1
}
return d
}
func decode8(e, k byte) byte {
for i := 0; i < 8; i++ {
if (k & 1) == 0 {
e = roR(e - 4)
} else {
e = roR(e + 3)
}
k = k >> 1
}
return e
}
func Encrypt(data, key []byte) []byte {
result := make([]byte, len(data))
dummy := byte(0)
dummy2 := byte(0)
dummy3 := byte(0)
dummy4 := byte(0)
for i := range data {
result[i] = data[i]
result[i] = encode8(result[i], dummy)
result[i] = encode8(result[i], dummy2)
result[i] = encode8(result[i], dummy3)
result[i] = encode8(result[i], dummy4)
for j := 0; j < len(key); j++ {
k := key[j]
result[i] = encode8(result[i], k)
}
dummy4 = dummy3
dummy3 = dummy2
dummy2 = dummy
dummy = result[i]
}
return result
}
func Decrypt(data, key []byte) []byte {
result := make([]byte, len(data))
dummy := byte(0)
dummy2 := byte(0)
dummy3 := byte(0)
dummy4 := byte(0)
ndummy := byte(0)
for i := range data {
result[i] = data[i]
ndummy = data[i]
for j := len(key) - 1; j >= 0; j-- {
k := key[j]
result[i] = decode8(result[i], k)
}
result[i] = decode8(result[i], dummy4)
result[i] = decode8(result[i], dummy3)
result[i] = decode8(result[i], dummy2)
result[i] = decode8(result[i], dummy)
dummy4 = dummy3
dummy3 = dummy2
dummy2 = dummy
dummy = ndummy
}
return result
}
func Crypt(data, key, salt []byte) string {
encode1 := Encrypt(data, key)
encode2 := Encrypt(data, salt)
encode3 := Encrypt(encode1, encode2)
return string(salt) + base64.StdEncoding.EncodeToString(encode3)
}
func SID(n int) string {
salt := "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
output := ""
for i := 0; i < n; i++ {
output = output + string(salt[randomx.Intn(len(salt))])
}
return output
}