class PassManager: def __init__(self): self.file = shelve.open(FILENAME) def __del__(self): self.file.close() def auth_access(self, key): try: stored_pass = self.file[PASS_FIELD] token = self.file[TOKEN_FIELD] if stored_pass == self.__hash(key, token): self.key = key self.cypher = Cypher(self.key) return True else: raise PassManagerException('Wrong Key') except KeyError: self.key = key self.cypher = Cypher(self.key) token = self.__generate_key() self.file[TOKEN_FIELD] = token self.file[PASS_FIELD] = self.__hash(self.key, token) return True def get_services(self): if not self.key: raise PassManagerException("You need to authenticate first") elif (len(self.file.keys()) - 2) > 0: return [ elem for elem in self.file if elem != PASS_FIELD and elem != TOKEN_FIELD ] else: raise PassManagerException("There aren't saved services yet") def remove_service(self, service): if not self.key: raise PassManagerException("You need to authenticate first") elif service != PASS_FIELD and service != TOKEN_FIELD: try: del self.file[service] return True except KeyError: raise PassManagerException('Service not found') else: raise PassManagerException('Service not found') return False def add_pass(self, service, passwd): if not self.key: raise PassManagerException("You need to authenticate first") elif service != PASS_FIELD and service != TOKEN_FIELD: try: var = self.file[service] if var: raise PassManagerException( 'This service already exists. Remove it if you want to change the password' ) except KeyError: self.file[service] = self.cypher.encrypt(passwd) return True else: raise PassManagerException( "that service name can't be used, sorry") def retrieve_pass(self, service): if not self.key: raise PassManagerException("You need to authenticate first") elif service != PASS_FIELD and service != TOKEN_FIELD: try: passwd = self.cypher.decrypt(self.file[service]) return passwd except KeyError: raise PassManagerException("Service not found") else: raise PassManagerException("Service not found") def __generate_key(self): return secrets.token_bytes(20) def __hash(self, key, random_token): return hashlib.sha224(key.encode('utf-8') + random_token).hexdigest()
from cypher import Cypher from token import CONFIG token = CONFIG['token'] get_url = 'https://api.codenation.dev/v1/challenge/dev-ps/generate-data?token={}'.format(token) post_url = 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token={}'.format(token) filename = 'answer.json' c = Cypher(get_url, post_url, filename) print(c.decrypt()) c.update()
def decrypt(): sqlite = Bdd() reading = sqlite.hash_bdd() global mail global identify global title2 global police2 global anti_brute_force global voice title2.pack() a = 0 b = 0 mot_finale = [] identify_encode = identify.get().encode("utf-8") mail_encode1 = mail.get() if bcrypt.checkpw(identify_encode, reading): liste = list(identify.get()) while a < 16: a += 1 mot_finale.append(liste[b]) b += 1 if b == len(liste): b = 0 else: continue mot_finale2 = ''.join(mot_finale) crypt = Cypher(mot_finale2) encryption_test = crypt.encrypt(mail_encode1) curseur3 = connexion.cursor() curseur3.execute("SELECT mail FROM auth") result = curseur3.fetchall() search_password = [] for resultat in result: result_decode = result[0] search_password.append(resultat[0]) connexion.commit() curseur4 = connexion.cursor() a = 0 for element in search_password: if element == encryption_test: curseur4.execute("SELECT pass FROM auth WHERE mail=?", [element]) result2 = curseur4.fetchone() connexion.commit() crypt = Cypher(mot_finale2) unpad_decrypt = crypt.decrypt(result2[0]) if voice.get() == 1: tts = gTTS('Your password is ' + unpad_decrypt, 'en') tts.save('voice.mp3') playsound('voice.mp3') os.remove("voice.mp3") return 0 else: resp = "The password is" + unpad_decrypt color_resp = "green" title2.pack_forget() title2 = Button(window, text=resp, bg=color_background, fg=color_resp, width=1000, height=2, borderwidth=0, font=police2) title2.pack() connexion.commit() a = 0 anti_brute_force = 0 return 0 else: a = 5 if a == 5: resp = "the email was not found" color_resp = "red" title2.pack_forget() title2 = Button(window, text=resp, bg=color_background, fg=color_resp, width=1000, height=2, borderwidth=0, font=police2) title2.pack() connexion.commit() return 0 else: if anti_brute_force == 6: resp = "Anti brute force activated for 30 seconds of inactivity" anti_brute_force = 0 else: resp = "The ID is false" color_resp = "red" title2.pack_forget() title2 = Button(window, text=resp, bg=color_background, fg=color_resp, width=1000, height=2, borderwidth=0, font=police2) title2.pack() return 0 if resp == "Anti brute force activated for 30 seconds of inactivity": time.sleep(30) anti_brute_force += 1 connexion.commit() global nombre_error nombre_error += 1 color_resp = "grey" resp = "ok" if nombre_error == 1: title2 = Button(window, text=resp, bg=color_background, fg=color_resp, width=1000, height=2, borderwidth=0, font=police2) else: title2.pack_forget()