Skip to content

GaecKo/MDPSaver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MDPSaver v1.0.0 Python Windows

Welcome to my Password Manager App.

Support via PayPal

Introduction

This app makes it easy for you to:

  • Add your passwords
  • See your added passwords
  • Generate / Create passwords for you

All of these are done with the pycryptodome and cryptography module, to make sure everything is secure. By making use of these modules no lambda person will be able to access your encrypted data.

General way of working: An Access Password (AP) that you create will be your key πŸ”‘ to all of your saved password 🏠. Without this AP, none of your password will be readable! All the password that you will add will be encrypted using a key which is derived from your AP, using Fernet, base64.urlsafe_b64encode, ...

Status: β–°β–°β–°β–°β–°β–°β–°β–°β–°β–° 100%


Installation

Windows Executable (.exe) πŸͺŸ

  • Here is a video on how to install MDPSaver (Easy Method)

Or follow these steps:

  1. Download and extract (unzip) the files.
  2. Go into the exe folder: ./MDPSaver-master/MDP_EXE/
  3. Righ click on MDPSaver.exe and create a shortcut to it
  4. Rename and move the shortcut on your desktop
  5. Double click on the shortcut which is on your desktop, if a red window opens up, click on more informationand then install anyway
  • Check the video if you have any trouble! You can also contact me on discord: GaecKo#7545

Python Script Python

  1. This app is 100% python based. To launch it as a normal python script, you need python3.x to be installed on your device.

    • Please make sure that you cross the pip option in the installation wizard as well!
  2. Once done, you will need to install some modules:

    • pip install cryptography
    • pip install pycryptodome
    • pip install pwinput
    • pip install colorama
    • if pip doesn't work, try using pip3
    • You now have the prerequired modules to continue!
  3. Download and unzip the files

  4. Go into the app folder: ./MDPSaver-master/MDP_APP/

  5. You should see all the python scripts, open a terminal in that folder and type python MDPSaver.py or python3 MDPSaver.py

    • If you have any issues like:
      • FileNotFoundError
      • Module not found, ...
    • Make sure you opened a terminal IN the MDP_APP/ folder! It should look like:

    X:\...\MDPSaver-master\MDPSaver-master\MDP_APP>python MDPSaver.py

  • The program should be running! Each time you want to launch MDPSaver, you need to repeat step 4 and 5!
  • If you have any problem using the app, contact me on Discord: GaecKo#7545

Update

  • If you used last version of MDPSaver, here is a video on how to update your old data to the new MDPSaver.

Update notice

I have been working on a new functionnality just recently called "Search Filter" which allows you to filter and show site with corresponding password / email / username. It's usefull if you wish for example to see all the sites that have the same password / ... .

It's only available on the python version. Please also check Notes for more information.


Walkthrough

Here is a walkthrough of the app

Starting Screen

Starting Screen

Main Menu

  • This is the Main Menu in which you can access all of the app functionnalities. Main Menu
1) Access my Passwords πŸ”Ž
  • You can easily access your already saved password by typing one in the main menu: AccessPassword

  • You can then:

    • Type the number corresponding to the password
    • Type a keyword which will display corresponding password
    • Type + or last password number + 1 to directly access "Add a password" AddPassword+
    • Press enter to leave
  • If you reach a saved password: AccessPasswordModification

  • You can then:

    • Reveal the password
    • Delete the password
    • Change the password
    • Change the username / email
    • Go back
2) Add a password βž•
  • To add a password, type 2 in the main menu: AddPassword
  • You can then add the Site, Username / email and the password
3) Generate Random Password πŸ”€
  • The app can also generate Random Password for you. This can be usefull when signing up on new website/ ...
  • The app lets you directly add the generated password to your saved password GeneratePassword
  • 4 ways of generation:
    • Weak: only letters + numbers | size 8~12
    • Medium: letters + numbers + symbols | size 10~20
    • Strong: long + letters + numbers + symbols | size 15~25
    • Custom: with(out) symbols + with(out) numbers | custom size
4) Change Username βœ’οΈ
  • If needed, you can change your Username: ChangeUsername
5) Change Access Password πŸ”
  • If needed, you can change your Access Password: ChangeAccessPassword
    • You will need to recreate a question and answer!
6) Help / Tutorial ❓
  • You can access a tutorial:

Tutorial

7) Leave ❌
  • To properly exit the program, just type 7: Exit
  • If you are using the .exe version, the cmd window might close.
8) System Settings βš™οΈ
  • You can access some deep app setting by typing 8: SystemSettings
  • You can then:
    • Hard Reboot Everything (reset everything)
    • Delete all password (reset data.txt)
    • Reset personnal data (this means that you will need to reconfigure the app, new AP, new question, ... If you use the same AP your password won't be lost, but it's kind of risky...)
  • This menu should only be used if you plan on testing things with the code or if you have issues with the program and that loosing your password doesn't afraid you.

SpeedTest πŸš€

  • Something I kept in mind during the project was to have a program wich is quick and simple. Starting the project I used a encode and decode function which turned out to be not that safe, as there was an already known way on how to crack them. I then switched to an official security system (Fernet from cryptography, allied with pycryptodome), that I used with a key which was direved using the Access Password. That way, and with 380 000 iterations, each saved password is encrypted and safe.

  • But how about speed ? Well after hours spent on data managing and improved encryption, I now have a system which is fast enough to ensure fluent usage.

  • If you want to test speed by yourself:

    • .\MDPSaver-master\MDPSaver-master\MDP_APP>python SpeedTest.py
    • You will be asked how many password you want to test with, just wait a bit and some results should be displayed!
  • Result (could be influenced by the machine you use):

With 50 passwords

  • High security system with no improvement: Old50
  • High security system with improvement: New50

With 100 passwords

  • High security system with no improvement: Old100
  • High security system with improvement: New100

How I did it (story time πŸ“–)

  • I used to save password this way:

      ```
      encrypted site 1 | encrypted username 1 | encrypted password 1
      encrypted site 2 | encrypted username 2 | encrypted password 2
      encrypted site 3 | encrypted username 3 | encrypted password 3
                                      ...
      ```
    

    It was then easy to decrypt using string.split(" | ") and then decrypt(AP, string[0]), ....

    I then simplified the process by directly encrypting the whole phrase, including the " | ". That made the encrypting and decrypting 3x faster. (I figured that out while explaining the method to @drudru18, thanks mate πŸ’˜)

    I would have something like this:

    encrypt(AP, site + " | " + username + " | " + password)

    To then first string = decrypt(AP, whole phrase) and then string.split(" | ").

  • I then figured out that the long processus of encrypting and decrypting was due to the key creation. This key is derived using the AP and is each time exactly the same. So, instead of creating for each encryption / decryption a key (which is each time the same), I would simply save it once into a program variable and re-used it for each encryption / decryption. That avoided 380 000 iterations each time.

  • To sum up, I went from:

    (3 encryption / decryption per password ) * 380 000 * numbers of password
    -> 3 * 380 000 * n = 1 140 00 iterations per password
    

    TO

    380 000 + ((1 encryption / decryption per password) * numbers of password)
    -> = 380 000 + n iterations for all of the password!
    

    That's how it went from 78 ms per password to 0.24 ms, so about 325x quicker! Of course, as the key is loaded once, you can add / load passwords thousand of times, in the same instance of the program, and you will have almost no encryption / decryption time.

Notes

  • The new functionnality won't be added to the .exe version, as it would require to recompile the whole program.

  • Also, as you can see within the python files:

            ==== ⚠ DISCLAIMER ⚠ ====
    This code is not suitable for professional use. As of the current state of the code, this 
    whole program is not sustainable and thus depreciated. 
    
    If you wish to rebuilt the program, feel free to do it and I'll check the PR! 

    This means that I won't work on this project anymore. I might add some new features, but I won't work on the code itself.