# -*- coding: utf-8 -*-
import sys, os, struct
from Crypto.Cipher import AES
 
 
 
FILEOUT_name = sys.argv[1] + '.enc'
 
#Avain
key = raw_input("Anna avain (16, 24 tai 32 tavua): ")
 
#Määritetään mode ja luodaan salain
mode = AES.MODE_CBC
cipher = AES.new(key, mode)
 
#Tarkistetaan alkuperäisen tiedoston koko
filesize = os.path.getsize(sys.argv[1])
#Määritetään kerrallaan salattavan lohkon koko(voi olla paljon suurempikin kuin tässä)
chunksize=AES.block_size * 16
 
#Avataan tiedostot lukua ja kirjoitusta varten
with open(sys.argv[1], 'rb') as FILEIN:
        with open(FILEOUT_name, 'wb') as FILEOUT:
		#Kirjoitetaan tiedoston alkuun salatun tiedoston koko
		FILEOUT.write(struct.pack('<Q', filesize))
 
		while True:
			#Yritetään lukea chunksize kokoinen pala tiedostosta
			chunk = FILEIN.read(chunksize)
			#Mikäli koko 0 ->tiedosto loppu
			if len(chunk) == 0:
				break
			#Mikäli ei nolla, mutta ei jaollinen aes blokin koolla
			elif len(chunk) % AES.block_size != 0:
				#Lisätään tyhjiä merkkejä, jotta saadaan oikea blokin koko
				chunk += ' ' * (AES.block_size - (len(chunk) % AES.block_size))
			#Kirjoitetaan salattu lohko tiedostoon
			FILEOUT.write(cipher.encrypt(chunk))
Last modified: 2013/07/01 14:42