Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6f86220

Browse files
Fastmode for decryption is also added.
1 parent 390170a commit 6f86220

File tree

2 files changed

+85
-24
lines changed

2 files changed

+85
-24
lines changed

‎S_DES/DESEncryptor.go

Lines changed: 80 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,11 @@ func (encryptor *DesEncryptor) fastEncrypt(file *os.File) {
166166
chunkMap[i] = bytesread
167167
}
168168
waitGroup.Wait()
169-
// if chunkCount == len(dataBuffer) {
170-
// fmt.Println("chunkCount and len(dataBuffer) are same")
171-
// }
172-
// Write encryption buffer into the file
169+
173170
for i := 0; i < chunkCount; i++ {
174171
encryptor.writeEncryptionBufferToFile(&encryptionBuffer[i], chunkMap[i], encryptor.encryptionFilename)
175172
}
176173
cnt += 1
177-
// fmt.Println("End of a loop, cnt:", cnt)
178174
}
179175
}
180176

@@ -227,42 +223,102 @@ func (encryptor *DesEncryptor) runEncryption(filename string) {
227223
encryptor.encryptChunk(&buffer, bytesread, &encryptionBuffer)
228224
// Write encryptionBuffer into file.
229225
encryptor.writeEncryptionBufferToFile(&encryptionBuffer, bytesread, encryptor.encryptionFilename)
230-
// fmt.Println("bytesread:", bytesread, "bytes to string:", string(buffer[:bytesread]))
231226
}
232227
normalElapsed := time.Since(normalStart)
233228
log.Println("The total time for normal mode: ", normalElapsed)
234229
}
235230
}
236231

232+
func (engine *DesEncryptor) concurrentChunkDecryption(waitGroup *sync.WaitGroup, buffer *[]byte, bufferDataSize int, decryptionBuffer *[][]byte) {
233+
defer waitGroup.Done()
234+
engine.decryptChunk(buffer, bufferDataSize, decryptionBuffer)
235+
}
236+
237+
func (engine *DesEncryptor) fastDecrypt(file *os.File) {
238+
dataBuffer := make([][]byte, engine.ConcurrentPaths) // holds the primary data to be decrypted.
239+
for i := 0; i < len(dataBuffer); i++ {
240+
dataBuffer[i] = make([]byte, engine.Chunksize)
241+
}
242+
decryptionBuffer := make([][][]byte, engine.ConcurrentPaths)
243+
for i := 0; i < len(decryptionBuffer); i++ {
244+
decryptionBuffer[i] = make([][]byte, engine.Chunksize)
245+
for j := 0; j < len(decryptionBuffer[i][j]); j++ {
246+
decryptionBuffer[i][j] = make([]byte, 8)
247+
}
248+
}
249+
waitGroup := new(sync.WaitGroup)
250+
chunkMap := make([]int, len(dataBuffer))
251+
var err error
252+
cnt := 0
253+
for err != io.EOF {
254+
err = nil
255+
bytesread := 0
256+
chunkCount := 0
257+
for i := 0; i < len(dataBuffer); i++ {
258+
bytesread, err = file.Read(dataBuffer[i])
259+
if err != nil {
260+
if err != io.EOF {
261+
log.Println("Problem reading from primary file", err)
262+
}
263+
break
264+
}
265+
waitGroup.Add(1)
266+
go engine.concurrentChunkDecryption(waitGroup, &dataBuffer[i], bytesread, &decryptionBuffer[i])
267+
chunkCount += 1
268+
chunkMap[i] = bytesread
269+
}
270+
waitGroup.Wait()
271+
272+
for i := 0; i < chunkCount; i++ {
273+
// write decryption buffer to file
274+
engine.writeDecryptionBufferToFile(&decryptionBuffer[i], chunkMap[i], engine.decryptionFilename)
275+
}
276+
cnt += 1
277+
}
278+
}
279+
237280
/**
238281
Decrypt the bytes of the encrypted file
239282
*/
240283
func (engine *DesEncryptor) runDecryption(filename string) {
241-
var buffer []byte = make([]byte, bufferSize)
242-
var decryptionBuffer [][]byte = make([][]byte, bufferSize)
243-
for i := 0; i < bufferSize; i++ {
244-
decryptionBuffer[i] = make([]byte, 8)
245-
}
246-
247-
// fmt.Println("Encryption filename:", engine.encryptionFilename)
248284
file, ferr := os.Open(engine.encryptionFilename)
285+
defer file.Close()
249286
if ferr != nil {
250287
log.Fatalln("Problem opening encrypted file...Filename:", engine.encryptionFilename, ferr)
288+
return
251289
}
252-
for {
253-
bytesread, err := file.Read(buffer)
254-
if err != nil {
255-
if err != io.EOF {
256-
log.Fatalln("Problem reading encrypted file", err)
290+
291+
if engine.Fastmode == true {
292+
log.Println("Fastmode enabled decryption...")
293+
concurrentStart := time.Now()
294+
engine.fastDecrypt(file)
295+
concurrentElapsed := time.Since(concurrentStart)
296+
log.Println("The total decryption time for fast mode: ", concurrentElapsed)
297+
} else {
298+
log.Println("Decryption in normal mode...")
299+
var buffer []byte = make([]byte, engine.Chunksize)
300+
var decryptionBuffer [][]byte = make([][]byte, engine.Chunksize)
301+
for i := 0; i < engine.Chunksize; i++ {
302+
decryptionBuffer[i] = make([]byte, 8)
303+
}
304+
normalStart := time.Now()
305+
for {
306+
bytesread, err := file.Read(buffer)
307+
if err != nil {
308+
if err != io.EOF {
309+
log.Fatalln("Problem reading encrypted file", err)
310+
}
311+
break
257312
}
258-
break
313+
engine.decryptChunk(&buffer, bytesread, &decryptionBuffer)
314+
// Write decryptionBuffer into file
315+
engine.writeDecryptionBufferToFile(&decryptionBuffer, bytesread, engine.decryptionFilename)
259316
}
260-
engine.decryptChunk(&buffer, bytesread, &decryptionBuffer)
261-
// Write decryptionBuffer into file
262-
engine.writeDecryptionBufferToFile(&decryptionBuffer, bytesread, engine.decryptionFilename)
263-
264-
// fmt.Println("Decryption, bytesread:", bytesread, " bytes to string:", string(buffer[:bytesread]))
317+
normalElapsed := time.Since(normalStart)
318+
log.Println("Total decryption time in normal mode: ", normalElapsed)
265319
}
320+
321+
// fmt.Println("Encryption filename:", engine.encryptionFilename)
266322
}
267323

268324
/**

‎des_config.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"fastmode": true,
3+
"threadcount": 8,
4+
"buffersize": 100000
5+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /