# -*- coding: utf-8 -*-
import sys, os, struct
from Crypto.Cipher import AES
 
#Kysytään avain
key = raw_input("Anna avain (16, 24 tai 32 tavua): ")
#Määritetään mode
mode = AES.MODE_CBC
 
#Määritetään kirjoitettavan tiedoston nimi
FILEOUT_name = sys.argv[1][:-3] + 'org'
#Määritetään kerrallaan käsiteltävän lohkon koko
chunksize=AES.block_size * 16
 
#Avataan tiedosto lukua varten
with open(sys.argv[1], 'rb') as FILEIN:
	#Luetaan tiedoston alkuperäinen koko
	size = struct.unpack('<Q', FILEIN.read(struct.calcsize('Q')))[0]
	#Luodaan salain
	cipher = AES.new(key, mode)
	#Avataan tiedosto kirjoitusta varten
	with open(FILEOUT_name, 'wb') as FILEOUT:
		while True:
			#Yritetään lukea chunksize kokoinen pala tiedostosta
			chunk = FILEIN.read(chunksize)
			#Mikäli koko 0 ->tiedosto loppu
			if len(chunk) == 0:
				break
			#Kirjoitetaan avattu lohko tiedostoon
			FILEOUT.write(cipher.decrypt(chunk))
		#Leikataan tiedoston koko vastaamaan alkuperäistä (=>leikataan padding pois)
		FILEOUT.truncate(size)
Last modified: 2013/07/01 14:42