
Explore cryptography fundamentals from symmetric and asymmetric encryption to hashing, with Python and Java implementations covering Caesar, Vigenere, RSA, Diffie-Hellman, elliptic curves, and SHA-256.
Explore the fundamentals of cryptography as the practice of secure communication against third parties. Learn about plaintext, ciphertext, and encryption and decryption with a private key, caesar cipher, des, aes.
Explore symmetric cryptosystems that use a single private key for encryption and decryption, their key exchange challenges, and how diffie-hellman and large networks motivate moving to asymmetric cryptosystems.
Explore asymmetric cryptosystems that use a public key for encryption and a private key for decryption, enabling secure communication without exchanging private keys.
Explore the Caesar cipher, the first private key symmetric substitution cryptosystem, explaining how shifting letters by a fixed key transforms plaintext to ciphertext, maps A to 0 and back.
Explore the Caesar cipher as a substitution cipher that encrypts by shifting plaintext letters with a fixed key and modulo 26. Learn the encryption and decryption functions, using integer representations.
Explore a concrete caesar cipher implementation: map plaintext letters to a 27-character alphabet (including whitespace), shift indices by the key with modulo 26, and build the ciphertext.
Test the Caesar cipher implementation in Python by encrypting and decrypting a message, demonstrating case insensitivity, key shifts, modulo arithmetic with the alphabet, and handling characters not in the alphabet.
Implement a Java caesar cipher class with encryption and decryption methods, using a 27-character alphabet including whitespace and a case-insensitive approach to shift letters by a key with modulo 26.
Implement Caesar cipher decryption using uppercase letters and a key with modulo arithmetic. The code decrypts the cipher text to recover the plaintext.
Implement and test a Caesar cipher in Java: encrypt with key three, decrypt with the same key, and use floor modulo to prevent negative indices, ensuring plaintext matches ciphertext.
Explains cracking the caesar cipher with a brute-force attack over a small 26-value key space, highlighting its ease and checking decrypted text for English validity.
Learn to crack caesar cipher with brute-force in Python by iterating all keys over a 27-letter alphabet, applying modulo-based decryption, and validating plaintext to reveal the correct key.
Explore cracking the Caesar cipher with a brute-force approach in Java by trying all possible keys, decrypting each candidate, and identifying the valid English plaintext.
Implement a frequency analysis algorithm to count uppercase letter frequencies, visualize them with a histogram, and use a dictionary of the alphabet for crypto analysis.
Implement frequency analysis in Java by counting relative letter frequencies from text, using an alphabet, a hashmap, and uppercase normalization to print results.
Detect whether decrypted text is English using a dictionary of words or machine learning, validating Caesar cipher outputs with a word list or models like SVM and KNN.
Detect English language with a Python language detector algorithm by loading the English words dot txt file of about 45,000 words, and count words in text.
Develop a Python language detector that counts English words from a dictionary to decide if text is English, using an 80% threshold (adjustable to 50%) and whitespace splitting.
Combine brute-force Caesar cipher cracking with language detection using an English words list; count matches and determine English text when 70% of the words are English to reveal the key.
Implement an English detector by brute-forcing the Caesar cipher and validating decrypted words against an English words list stored in a Java array list, using a 50 percent threshold.
Create a Java language detector that loads English words from English words.txt via a file processor. Count English words in text and classify as English with a 60 percent threshold.
Combine brute-force Caesar cipher cracking with a language detector to identify English plaintext across 27 keys, decrypting and printing the English results.
Learn language detection using a machine learning approach with scikit-learn, including data splits, tf-idf vectorization, and logistic regression. Compare it to a dictionary-based method and review accuracy via confusion matrices.
Explore the Vigenere cipher, a polyalphabetic private key cryptosystem that uses a keyword to shift letters, with a key space larger than the Caesar cipher, and discuss the Kasiski approach.
Explore the vigenere cipher through a concrete encryption and decryption example, using a multi-letter private key to shift letters, ignore spaces, and apply modulo 26 for reversible results.
Define an alphabet and convert text to uppercase, then implement the Vigenere cipher using a secret key, key index tracking, and the modulo operator to transform plaintext to ciphertext.
Decrypt the Vigenere cipher by normalizing text to uppercase and subtracting key values, using a repeating key with modulo indexing. Includes ASCII encoding and frequency analysis, including the Kasiski algorithm.
In this course you will learn about cryptography and hashing in Python and Java as well. You will understand most of the private key (symmetric) and pubic key (asymmetric) cryptosystems on a step by step basis. You can learn about the theory as well as the implementation for every cryptographic algorithm - and how to crack these systems (so what are the weaknesses).
Chapter 1 - Cryptography Fundamentals
what is the aim of cryptography?
private key and public key cryptosystems
Chapter 2 - Caesar Cipher
Caesar cipher theory and implementation
how to crack Caesar cipher
frequency analysis and language detection
Chapter 3 - Vigenere Cipher
Vigenere cipher theory and implementation
how to crack Vigenere cipher with Kasiski-algorithm
Chapter 4 - One Time Pad (Vernam Cipher)
random and pseudo-random numbers
the XOR logical operator
one time pad theory and implementation
why is it impossible to crack Vernam cipher?
Shannon's secrecy
Chapter 5 - Data Encryption Standard (DES)
data encryption standard (DES) theory and implementation
cryptoanalysis techniques
linear cryptoanalysis and differential cryptoanalysis
Chapter 6 - Advanced Encryption Standard (AES)
advanced encryption standard (AES) theory and implementation
Shannon's confusion and diffusion
Chapter 7 - Asymmetric Cryptosystems
problems with private key cryptosystems
random numbers and prime numbers in cryptography
Chapter 8 - Modular Arithmetic
modular arithmetic fundamentals
finding prime numbers - naive approach and advanced algorithms
integer factorization problem
discrete logarithm problem
Chapter 9 - Diffie-Hellman Key Exchange
Diffie-Hellman key exchange algorithm theory and implementation
prime numbers and primitive roots
man-in-the-middle attack
Chapter 10 - RSA Algorithm
RSA algorithm theory and implementation
the problem of factorization
Chapter 11 - Advanced Modular Arithmetic
Euclidean and the greatest common divisor (GCD) problem
extended Euclidean algorithm (EGCD)
modular inverse problem
Chapter 12 - Elliptic Curve Cryptography (ECC)
elliptic curve cryptography theory and implementation
why does Bitcoin use elliptic curve cryptography?
Chapter 13 - Cryptographic Hashing
what is hashing in cryptography?
properties of hashing
birthday paradox
MD5 and SHA algorithms
Thanks for joining my course, let's get started!