This repository contains three applied cryptography projects developed during my Erasmus studies at the University of Bologna for the course Elements of Applied Data Security. The projects cover core concepts in modern and classical cryptography, implemented in Python using Jupyter Notebooks.
📚 Course: Elements of Applied Data Security
🏫 University: University of Bologna
📈 Grade Average: 93.33%
Each project is organized in its own folder and contains a Jupyter Notebook with explanations, code, and test results.
Folder: SubstitutionCiphers/
This notebook explores classical substitution techniques including Caesar Cipher, Monoalphabetic Substitution, and the Vigenère Cipher. It includes both encryption and decryption methods along with frequency analysis.
Folder: BlockCiphers/
Covers the principles of block ciphers such as DES and AES. Implements basic encryption and decryption schemes using Python libraries, and explains the structure of these algorithms (e.g., Feistel Networks, S-boxes, modes of operation like ECB/CBC).
Folder: StreamCiphers/
Focuses on stream ciphers, with implementations of LFSRs and pseudo-random keystream generators. Also includes examples of XOR-based stream encryption and a discussion of security implications.
- Python 3.x
- Jupyter Notebooks
- NumPy, matplotlib, and standard libraries
- Custom implementations and basic crypto libraries
- These notebooks are educational and intended for academic and learning purposes only.
- Some cryptographic methods shown here are outdated and should not be used in real-world applications without proper cryptographic standards.
Name: Selma Memic
Program: Erasmus Exchange Student
Home University: Faculty of Information Technology - Mostar
Year: 2024–2025
Feel free to open issues or fork the repository if you find any improvements or want to collaborate!