Skip to content

Commit a9ccd46

Browse files
committed
method names corrected.
0 parents  commit a9ccd46

File tree

8 files changed

+694
-0
lines changed

8 files changed

+694
-0
lines changed

S_DES/DESEncryptor.go

+234
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
package S_DES
2+
3+
import (
4+
"io"
5+
"log"
6+
"os"
7+
)
8+
9+
const (
10+
bufferSize = 1000000
11+
)
12+
13+
type DesEncryptor struct {
14+
filename string
15+
encryptionFilename string
16+
cipher DES_8encryption
17+
decryptionFileConnector *os.File
18+
decryptionFilename string
19+
}
20+
21+
func (encryptor *DesEncryptor) getBinaryByteArray(byteVal byte) []byte {
22+
var byteArray []byte
23+
for byteVal > 0 {
24+
// byteArray = append([]byte{(byte)(byteVal % 2)}, byteArray...)
25+
byteArray = append(byteArray, (byte)(byteVal%2))
26+
byteVal /= 2
27+
}
28+
for (int)(len(byteArray)) < 8 {
29+
// byteArray = append([]byte{0}, byteArray...)
30+
byteArray = append(byteArray, (byte)(0))
31+
}
32+
33+
return byteArray
34+
}
35+
36+
func (encryptor *DesEncryptor) convertBinaryByteArrayToByte(byteArray *[]byte) byte {
37+
var res byte = 0
38+
for i := len(*byteArray) - 1; i >= 0; i-- {
39+
if (*byteArray)[i] == (byte)(1) {
40+
res |= (1 << i)
41+
} else {
42+
mask := ^(1 << i)
43+
res &= (byte)(mask)
44+
}
45+
}
46+
47+
return res
48+
}
49+
50+
func (encryptor *DesEncryptor) encryptChunk(buffer *[]byte, bufferDataSize int, encryptionBuffer *[][]byte) {
51+
for i := 0; i < bufferDataSize; i++ {
52+
byteVal := (*buffer)[i]
53+
var binaryByteArray []byte = encryptor.getBinaryByteArray(byteVal)
54+
(*encryptionBuffer)[i] = encryptor.cipher.Encrypt(binaryByteArray)
55+
}
56+
}
57+
58+
func (engine *DesEncryptor) decryptChunk(buffer *[]byte, bufferDataSize int, decryptionBuffer *[][]byte) {
59+
for i := 0; i < bufferDataSize; i++ {
60+
byteVal := (*buffer)[i]
61+
var binaryByteArray []byte = engine.getBinaryByteArray(byteVal)
62+
(*decryptionBuffer)[i] = engine.cipher.Decrypt(binaryByteArray)
63+
}
64+
}
65+
66+
func (encryptor *DesEncryptor) writeEncryptionBufferToFile(encryptionBuffer *[][]byte,
67+
encryptionDataSize int,
68+
filename string) {
69+
// var byteVal byte
70+
// fmt.Println("enccryption buffer length:", encryptionDataSize)
71+
var byteArray []byte = make([]byte, encryptionDataSize)
72+
var cache []byte = make([]byte, 8)
73+
for i := 0; i < encryptionDataSize; i++ {
74+
copy(cache[:], (*encryptionBuffer)[i][:])
75+
byteVal := encryptor.convertBinaryByteArrayToByte(&cache)
76+
byteArray[i] = byteVal
77+
}
78+
79+
_, err := os.Stat(filename)
80+
if os.IsNotExist(err) {
81+
_, ferr := os.Create(filename)
82+
if ferr != nil {
83+
log.Fatalln("Problem encrypting file", ferr)
84+
}
85+
}
86+
// write byte array to buffer
87+
permissions := 0644
88+
file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, (os.FileMode)(permissions))
89+
if err != nil {
90+
log.Fatalln("Problem encrypting file", err)
91+
}
92+
_, err = file.WriteString((string)(byteArray))
93+
94+
file.Close()
95+
}
96+
97+
func (engine *DesEncryptor) writeDecryptionBufferToFile(decryptionBuffer *[][]byte,
98+
decryptionDataSize int,
99+
filename string) {
100+
101+
// fmt.Println("Decryption buffer length:", decryptionDataSize)
102+
var byteArray []byte = make([]byte, decryptionDataSize)
103+
var cache []byte = make([]byte, 8)
104+
for i := 0; i < decryptionDataSize; i++ {
105+
copy(cache[:], (*decryptionBuffer)[i][:])
106+
byteVal := engine.convertBinaryByteArrayToByte(&cache)
107+
byteArray[i] = byteVal
108+
}
109+
110+
_, err := engine.decryptionFileConnector.WriteString((string)(byteArray))
111+
if err != nil {
112+
log.Fatalln("Problem decrypting file", err)
113+
}
114+
}
115+
116+
/**
117+
Reads in a chunk of byte-data from file.
118+
Encrypts it.
119+
Writes the encrypted chunk of data in the encryption file
120+
*/
121+
func (encryptor *DesEncryptor) runEncryption(filename string) {
122+
123+
file, err := os.Open(filename)
124+
if err != nil {
125+
log.Fatalln("Problem encrypting file", err)
126+
return
127+
}
128+
defer file.Close()
129+
130+
// Create encryption file
131+
_, err = os.Create(encryptor.encryptionFilename)
132+
if err != nil {
133+
log.Fatalln("Problem encrypting file", err)
134+
}
135+
136+
var buffer []byte
137+
buffer = make([]byte, bufferSize)
138+
var encryptionBuffer [][]byte
139+
encryptionBuffer = make([][]byte, bufferSize)
140+
for i := 0; i < bufferSize; i++ {
141+
encryptionBuffer[i] = make([]byte, 8)
142+
}
143+
144+
for {
145+
bytesread, err := file.Read(buffer)
146+
if err != nil {
147+
if err != io.EOF {
148+
log.Fatalln("Problem while reading the contents of the file.")
149+
}
150+
break
151+
}
152+
153+
encryptor.encryptChunk(&buffer, bytesread, &encryptionBuffer)
154+
// Write encryptionBuffer into file.
155+
encryptor.writeEncryptionBufferToFile(&encryptionBuffer, bytesread, encryptor.encryptionFilename)
156+
157+
// fmt.Println("bytesread:", bytesread, "bytes to string:", string(buffer[:bytesread]))
158+
}
159+
}
160+
161+
/**
162+
Decrypt the bytes of the encrypted file
163+
*/
164+
func (engine *DesEncryptor) runDecryption(filename string) {
165+
var buffer []byte = make([]byte, bufferSize)
166+
var decryptionBuffer [][]byte = make([][]byte, bufferSize)
167+
for i := 0; i < bufferSize; i++ {
168+
decryptionBuffer[i] = make([]byte, 8)
169+
}
170+
171+
// fmt.Println("Encryption filename:", engine.encryptionFilename)
172+
file, ferr := os.Open(engine.encryptionFilename)
173+
if ferr != nil {
174+
log.Fatalln("Problem opening encrypted file...Filename:", engine.encryptionFilename, ferr)
175+
}
176+
for {
177+
bytesread, err := file.Read(buffer)
178+
if err != nil {
179+
if err != io.EOF {
180+
log.Fatalln("Problem reading encrypted file", err)
181+
}
182+
break
183+
}
184+
engine.decryptChunk(&buffer, bytesread, &decryptionBuffer)
185+
// Write decryptionBuffer into file
186+
engine.writeDecryptionBufferToFile(&decryptionBuffer, bytesread, engine.decryptionFilename)
187+
188+
// fmt.Println("Decryption, bytesread:", bytesread, " bytes to string:", string(buffer[:bytesread]))
189+
}
190+
}
191+
192+
/**
193+
public File-encryption API
194+
*/
195+
func (encryptor *DesEncryptor) EncryptFile(filename string) {
196+
log.Println("File-Encryption procedure started...")
197+
198+
encryptor.filename = filename
199+
encryptor.encryptionFilename = filename + ".enc"
200+
// encryptor.cipher.Init("des_input.txt")
201+
encryptor.runEncryption(filename)
202+
203+
log.Println("File-Encryption procedure complete...")
204+
}
205+
206+
/**
207+
Public Decryption API
208+
*/
209+
func (engine *DesEncryptor) DecryptFile(filename string) {
210+
log.Println("Decryption procedure started...")
211+
212+
engine.decryptionFilename = "dec." + filename
213+
engine.encryptionFilename = filename + ".enc"
214+
var err error
215+
engine.decryptionFileConnector, err = os.Create(engine.decryptionFilename)
216+
if err != nil {
217+
log.Fatalln("Problem decrypting the file", err)
218+
}
219+
permissions := 0644
220+
engine.decryptionFileConnector, err =
221+
os.OpenFile(engine.decryptionFilename, os.O_APPEND|os.O_WRONLY, (os.FileMode)(permissions))
222+
// file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, (os.FileMode)(permissions))
223+
// engine.cipher.Init("des_input.txt")
224+
engine.runDecryption(filename)
225+
engine.decryptionFileConnector.Close()
226+
227+
log.Println("Decryption procedure complete...")
228+
}
229+
230+
func (engine *DesEncryptor) Init(filename string) {
231+
log.Println("Initializing FES engine...")
232+
engine.cipher.Init(filename)
233+
log.Println("FES engine intialization complete...")
234+
}

0 commit comments

Comments
 (0)