Mi dolor de cabeza es este quiero hacer un programa que me encripte ciertos archivos y luego borre la version original, por que lo he intentado solo me funciona con un solo archivo y crea uno nuevo, yo trabajo con archivos delicados y cuando termino de moficarlos es cifrar y borrar la version sin cifrar.
Aqui comienza el codigo:
## def encrypt(key, filename):
chunksize = 64*1024
outputFile = "(encrypted)"+filename
filesize = str(os.path.getsize(filename)).zfill(16)
IV = ''
for i in range(16):
IV += chr(random.randint(0, 0xFF))
encryptor = AES.new(key, AES.MODE_CBC, IV)
with open(filename, 'rb') as infile:
with open(outputFile, 'wb') as outfile:
outfile.write(filesize)
outfile.write(IV)
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += ' ' * (16 - (len(chunk) % 16))
outfile.write(encryptor.encrypt(chunk))
Este codigo me lo encontre en un foro ya que no encuentro nada relevante en pycrypto.
lista_archivos = [ [os.path.join(root,file),root.split(path)[1]] for root,dirs,files in os.walk(path)
for file in files if os.path.splitext(file)[-1] in extensiones ]
encrypt(getKey(password), lista_archivos)
lista_archivos es donde estan todos los archvios con extensiones .xx
luego llamo a la funcion de encriptacion.
asi genero el cifrado:
password = "xx"
> def getKey(password):
hasher = SHA256.new(password)
return hasher.digest()
lo estoy resumiendo lo mas que puedo
bueno el caso es que, la lista recorre todos los archivos con extensiones .xx, y luego me lo almacena en una lista yo quiero cifrar esos archivos y luego borrar el original, arriba el codigo de cifrar solo me permite cifrar un solo archivo, si alguien me ayuda se los agradecería mucho .
Gracias de antemano!
[MOD]: Menudo desastre con tanto QUOTE. Intenta utilizar la etiqueta CODE como Dios manda...
la verdad que como pusiste el código da asco, ahora supongo que tu problema está acá:
lista_archivos = [ [os.path.join(root,file),root.split(path)[1]] for root,dirs,files in os.walk(path)
for file in files if os.path.splitext(file)[-1] in extensiones ]
encrypt(getKey(password), lista_archivos)
probá con algo así:
for root,dirs,files in os.walk(path):
for file in files:
match= re.search(contiene,file)
if match is not None:
encrypt(getKey(password), file)
por las dudas, tenés que importar re
ahhh y "contiene" es la variable con la extensión de archivos, por si solo es un tipo de archivo
Saludos.
ahahaha sorry por el desastre es que soy nuevo en el foro, al ejecutar me dio este error.
Edito el error no me deja ponerlo en formato python
match= re.search(extensiones,file)
File "C:\Python27\lib\re.py", line 146, in search
return _compile(pattern, flags).search(string)
File "C:\Python27\lib\re.py", line 237, in _compile
p, loc = _cache[cachekey]
TypeError: unhashable type: 'list'
ah! listo, no puedo ayudarte no uso ni por casualidad 2.7, pero supongo que en extensiones pusiste por ejemplo:
extensiones=".pdf"
o la extensión que quieras encryptar.
pongo ejemplo
".pdf"
que es lo que quiero filtrar
la verdad no me interesa buscar las soluciones entre las versiones de python pero creo que podrías probar también:
for root,dirs,files in os.walk(path):
for file in files:
(nombreFichero, extension) = os.path.splitext(fichero)
if(extension == ".pdf"):
aencriptar=nombreFichero+extension
encrypt(getKey(password), aencriptar)
para no usar el modulo re que es el que está dando problemas.
sabes bro yo tenia algo igual en mente Xd.
for root,dirs,files in os.walk(home):
for file in files:
if os.path.splitext(file)[-1] in extensiones:
encrypt(getKey(password), file)
ese fue lo que puse y tanto ese codigo como el tuyo, me encriptan los archivos que estan en el directorio donde se encuentra el scrip, me faltaría que me recorra todos los directorios. Y no solo uno.
¿y si cambias (home) por ("c:")?
tampoco :-( , y para que funcione tengo que poner el script ej en el escritorio que es donde tengo 2 o 3 archivos de los muchos pero cuando me va a buscar uno que no esta en el escritorio, me da error.
lo probé en windows y desde otra unidad y lo que puse me anda, ahora si usas linux y python 2.7 no tengo la menor idea, porque no uso esos entornos.
pero te cifra todos los archivos con dicha extension en los diferentes directorios o solo en un directorio? yo uso windows y python 2.7