1+ import mysql .connector
2+ import sqlite3
3+ import functools
4+ import operator
5+ import json
6+ import base64
7+ import os
8+ import cryptography
9+ from cryptography .fernet import Fernet
10+ from cryptography .hazmat .backends import default_backend
11+ from cryptography .hazmat .primitives import hashes
12+ from cryptography .hazmat .primitives .kdf .pbkdf2 import PBKDF2HMAC
13+
14+ #connect to database
15+ mydb = mysql .connector .connect (
16+ host = "localhost" ,
17+ user = "root" ,
18+ database = "db_password"
19+ )
20+
21+ #set cursor
22+ mycursor = mydb .cursor (buffered = True )
23+ d = mydb .cursor (buffered = True )
24+ i = mydb .cursor (buffered = True )
25+
26+ #interfaces
27+ print ("\n \n Welcome to password manager python! what you want to do?(v to view all your password,i to insert,d to delete" )
28+ cmd = input (">" )
29+
30+ #view query
31+ if cmd == 'v' or cmd == 'V' :
32+ mycursor .execute ("SELECT id, name FROM tb_nap" ) #select id,name from database
33+ myresult = mycursor .fetchall ()
34+
35+ if len (myresult )== 0 : #detect blank input
36+ print ("Notthing here\n " )
37+ else :
38+ print ("What you wanna see?" )
39+ for x in myresult :
40+ print (x )
41+
42+ icmd = input ("Enter ID:" )
43+ if icmd == '' :
44+ print ("Error id." )
45+ else :
46+ d .execute ("SELECT id,name FROM tb_nap WHERE id= %s" ,(icmd ,)) #select id,name from id input
47+ i .execute ("SELECT password FROM tb_nap WHERE id= %s" ,(icmd ,)) #select password from id input
48+ p = d .fetchall ()
49+ i = i .fetchall ()
50+ password = " , " .join ( map (str , i ) ) #transition list to string
51+
52+ k = ("key" ) #set key
53+ k_encode = k .encode () #encode key to byte
54+ p_encode = password .encode () #encode password to byte
55+ salt = b'`R\xf7 \xc0 \xf3 +@\xdd ~\xa4 K1Ty\x83 \x9a '
56+ kdf = PBKDF2HMAC (
57+ algorithm = hashes .SHA256 (),
58+ length = 32 ,
59+ salt = salt ,
60+ iterations = 100000 ,
61+ backend = default_backend ()
62+ )
63+ key = base64 .urlsafe_b64encode (kdf .derive (k_encode ))
64+ f = Fernet (key ) #ready to decrypt
65+ decrypted = decrypted = f .decrypt (p_encode ) #decrypted
66+ ogpasswd = decrypted .decode () #decode from byte to string
67+
68+ print ("Password for" ,p ,"is" ,ogpasswd ) #show id,name,password
69+
70+
71+ #insert
72+ elif cmd == 'i' or cmd == 'I' :
73+ print ("Insert name and password" )
74+ n = input ("name>" )
75+ p = input ("password>" )
76+
77+ if n == '' or p == '' : #detect blank input
78+ print ("Can't insert into database." )
79+ else :
80+ k = ("key" ) #set key
81+ k_encode = k .encode () #encode key to byte
82+ p_encode = p .encode () #encode password input to byte
83+ salt = b'`R\xf7 \xc0 \xf3 +@\xdd ~\xa4 K1Ty\x83 \x9a '
84+ kdf = PBKDF2HMAC (
85+ algorithm = hashes .SHA256 (),
86+ length = 32 ,
87+ salt = salt ,
88+ iterations = 100000 ,
89+ backend = default_backend ()
90+ )
91+ key = base64 .urlsafe_b64encode (kdf .derive (k_encode ))
92+
93+ f = Fernet (key ) #ready to encrypt
94+ encrypted = f .encrypt (p_encode ) #encrpyted
95+
96+ sql = "INSERT INTO tb_nap (name, password) VALUES (%s, %s)" #insert to table query
97+ val = (n , encrypted )
98+ mycursor .execute (sql , val )
99+ mydb .commit () #confirm operation to database
100+
101+ print (mycursor .rowcount , "password inserted" ) #show number(s) of query that have inserted
102+
103+ #delete
104+ elif cmd == 'd' or cmd == 'D' :
105+ mycursor .execute ("SELECT id,name FROM tb_nap" ) #select id,name from db
106+ myresult = mycursor .fetchall ()
107+ for x in myresult : #show id,name query in database
108+ print ("What you want to delete" )
109+ print (x )
110+
111+ i = input ("Enter id:" ) #enter query id
112+ if i == '' : #detect blank input
113+ print ("Error receiving command." )
114+ else :
115+ sql = "DELETE FROM tb_nap WHERE id = %s" #delete from query id
116+ mycursor .execute (sql , (i ,))
117+ mydb .commit () #confirm operation to database
118+
119+ print (mycursor .rowcount , "name and password deleted" ) #show number(s) of query that have deleted
120+
121+ #error
122+ else :
123+ print ("\033 [1;31;40m Error,Can't define command...plese try again \033 [1;37;40m\n " )
0 commit comments