我正在尝试创建一个可以存储密码的程序,存储和打印密码的程序部分工作正常,但我尝试添加密码以便能够运行程序。由于我希望密码在程序的多次运行中保持持久性,因此我创建了一个存储密码的文件,在显示任何密码之前,我必须输入该密码。问题是,由于我不希望有人能够使用文本编辑器打开密码文件来查看密码,我尝试加密它,但是当我尝试解密文件以检查用户输入是否是与密码相同,程序冻结(它仍然允许输入但不做任何事情)并且文本文件的大小不断增加,当我第一次注意到(自IDE冻结后大约30秒)文件是8gb而我必须强制关闭Python才能删除文本文件。
import os
from Crypto.Cipher import AES
from Crypto.Hash import SHA256
from Crypto import Random
opcionCorrecta=False
repetir=True
sesiónIniciada=False
def encrypt(key, filename):
chunksize = 64*1024
outputFile = filename
filesize=str(os.path.getsize(filename)).zfill(16)
IV = Random.new().read(16)
encryptor = AES.new(key, AES.MODE_CBC, IV)
with open(filename, 'rb') as infile:
with open(outputFile, 'wb') as outfile:
outfile.write(filesize.encode('utf-8'))
outfile.write(IV)
while True:
chunk = infile.read(chunksize)
if len(chunk)==0:
break
elif len(chunk) % 16 !=0:
chunk += b' ' *(16-(len(chunk)%16))
outfile.write(encryptor.encrypt(chunk))
def decrypt(key, filename):
chunksize = 64*1024
outputFile = filename[:11]
with open(filename, 'rb') as infile:
filesize = int(infile.read(16))
IV = infile.read(16)
decryptor = AES.new(key, AES.MODE_CBC, IV)
with open(outputFile, 'wb') as outfile:
while True:
chunk = infile.read(chunksize)
if len(chunk)==0:
break
outfile.write(decryptor.decrypt(chunk))
outfile.truncate(filesize)
def getKey(password):
hasher = SHA256.new(password.encode('utf-8'))
return hasher.digest()
#Bucle para repetir el programa hasta que se elija la opción para salir
while repetir:
while sesiónIniciada==False:
if os.path.isfile("E:\Mis Documentos\Python\contraseña")==False:
contraseña=input("Introduce la contraseña para tu cuenta: ")
contraseñaArchivo=open("contraseña","w")
contraseñaArchivo.write(contraseña)
encrypt(getKey(contraseña), "contraseña")
contraseñaArchivo.close()
elif os.path.isfile("E:\Mis Documentos\Python\contraseña"):
contraseña=input("Introduce tu contraseña: ")
decrypt(getKey(contraseña), "contraseña")
contraseñaArchivo=open("contraseña","r")
if contraseña!=contraseñaArchivo.read():
print("Contraseña incorrecta")
sesiónIniciada=False
else:
print("Contraseña correcta")
sesiónIniciada=True
contraseñaArchivo.close()
#Bucle para asegurarse que se elije una opción válida
while opcionCorrecta==False:
if os.path.isfile("E:\Mis Documentos\Python\cuenta"):
print('''Elige una opción:
1. Introducir cuenta
2. Buscar cuenta
3. Mostrar todas las cuentas
4. Salir''')
opción=int(input())
if opción<1 or opción>4:
opcionCorrecta=False
else:
opcionCorrecta=True
else:
print('''Elige una opción:
1. Introducir cuenta''')
opción=int(input())
if opción!=1:
opcionCorrecta=False
else:
opcionCorrecta=True
if opción==1:
#El programa pide la página, el usuario y la contraseña y después los añade a un archivo separando los datos con comas
Pagina=input("Introduce el nombre de la página: ")
Usuario=input("Introduce el nombre de usuario: ")
Contraseña=input("Introduce la contraseña: ")
cuenta=open("cuenta","a")
cuenta.write("%s," % Pagina)
cuenta.write("%s," % Usuario)
cuenta.write(Contraseña)
cuenta.write("\n")
cuenta.close()
opcionCorrecta=False
if opción==2:
#El programa pide la palabra a buscar e imprime todas las líneas que incluyan la búsqueda
búsqueda=input("Introduce tu búsqueda: ")
with open("cuenta") as f:
for line in f:
if búsqueda in line:
print (line)
opcionCorrecta=False
if opción==3:
#Imprime todos las cuentas guardadas en el archivo
cuenta=open("cuenta","r")
print(cuenta.read())
opcionCorrecta=False
if opción==4:
#Cierra el programa
repetir==False
break
为了制作加密器/解密器,我遵循了this教程