The aim of the project is to create an encrypted and secured file storage system to transfer files within users in a remote location. This system will require an input that is successfully encrypted using any of the algorithm techniques and store them anywhere. The uploaded file can be downloaded by other users, but to read the data present in it, they have to decrypt the file using the decryption algorithm and the information provided about the file within the users by the owner
Libraries Used:
- Flask 1.1.1
- werkzeug
- Cryptography 2.9.2
Step 1: Install Requirements
pip install -r requirements.txt
Step 2: Run the application
python3 app.py
or try python app.py
Step 3: Visit the localhost on your browser
To achieve the above goal, the following methodology happens on sender side:
- Load the file on the server. It can be any type of file.
- Dividing the uploaded file into N parts depending on the fixed block size.
- Encrypting all the sub-files using any one of the selected algorithms (Algorithm is changed with every part in round robin fashion).
- The keys for cryptography algorithms used are stored in a file and then the resulting file is secured using a different cryptographic algorithm and the key for this algorithm is provided to the user as public key, which needs to be transferred safely to the receiver. (Currently, we are using symmetric encryption, we may also shift to authentication and asymmetric encryption in future.)
After the above steps on the sender side, you will have N files which are in encrypted form which are stored on the server and a key which is downloaded as public key for decrypting the file and downloading it.
To restore the file:
- Load the key (.pem file) on the server. Ask it from your sender.
- Decrypt the keys of the algorithms.
- Decrypt all the N subfiles using the same algorithms which were used to encrypt them.
- Combine all the N subfiles to form the original file and provide it to the user for downloading.
The MIT License (MIT) 2017 - OPEN COMMUNITY.