Hashing algorithms (SHA, MD5) in Cybersecurity - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we use hashing algorithms like SHA or MD5, we want to know how the time to create a hash changes as the input data grows.
We ask: How much longer does it take to hash bigger files or messages?
Analyze the time complexity of this hashing process.
function hashData(data) {
let hash = initializeHash();
for (let i = 0; i < data.length; i++) {
hash = updateHash(hash, data[i]);
}
return finalizeHash(hash);
}
This code takes each piece of data and updates the hash step by step until done.
Look at what repeats as the input grows.
- Primary operation: Looping through each data element to update the hash.
- How many times: Exactly once for every item in the input data.
As the input size grows, the number of steps grows in the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 updates |
| 100 | 100 updates |
| 1000 | 1000 updates |
Pattern observation: Doubling the input doubles the work needed.
Time Complexity: O(n)
This means the time to hash grows directly with the size of the input data.
[X] Wrong: "Hashing always takes the same time no matter the input size."
[OK] Correct: Actually, hashing processes each piece of data, so bigger inputs take more time.
Understanding how hashing time grows helps you explain performance in security tasks clearly and confidently.
"What if the hashing algorithm processed data in fixed-size blocks instead of one element at a time? How would that affect the time complexity?"
Practice
MD5 and SHA in cybersecurity?Solution
Step 1: Understand hashing function role
Hashing algorithms convert any input data into a fixed-size string of characters, called a hash, which uniquely represents the original data.Step 2: Identify the main use in cybersecurity
This fixed-size hash is mainly used to verify data integrity, ensuring data has not been altered.Final Answer:
To create a fixed-size code representing data for integrity verification -> Option BQuick Check:
Hashing = Data integrity check [OK]
- Confusing hashing with encryption
- Thinking hashing compresses data
- Believing hashing generates passwords
Solution
Step 1: Recall MD5 hash size
MD5 produces a fixed-size hash of 128 bits, usually shown as a 32-character hexadecimal string.Step 2: Compare options with MD5 output format
The 128-bit fixed-length hexadecimal string correctly describes MD5 output as a fixed-length hexadecimal string.Final Answer:
A 128-bit fixed-length hexadecimal string -> Option DQuick Check:
MD5 hash length = 128 bits [OK]
- Thinking MD5 output length varies
- Confusing MD5 with SHA-256 length
- Assuming output is plain text
import hashlib hash_object = hashlib.sha256(b'password123') hex_dig = hash_object.hexdigest() print(hex_dig)
What will this code output?
Solution
Step 1: Understand hashlib usage
The code uses hashlib.sha256 to hash the byte string b'password123'. The hexdigest() method returns the hash as a hexadecimal string.Step 2: Identify output length and content
SHA-256 produces a 256-bit hash, which is 64 hex characters long. The output will be this 64-character hex string representing the hash.Final Answer:
A 64-character hexadecimal string representing the SHA-256 hash of 'password123' -> Option AQuick Check:
SHA-256 output length = 64 hex chars [OK]
- Expecting original string as output
- Confusing input type causing error
- Mixing MD5 and SHA-256 output lengths
import hashlib password = 'mypassword' hash = hashlib.md5(password) print(hash.hexdigest())
What is the error in this code?
Solution
Step 1: Check input type for hashlib.md5()
hashlib.md5() requires a bytes-like object, but the code passes a string directly.Step 2: Identify correct fix
The string should be encoded to bytes using password.encode() before passing to md5().Final Answer:
The input to md5() must be bytes, not a string -> Option CQuick Check:
hashlib.md5() input = bytes [OK]
- Passing string directly without encoding
- Thinking hexdigest() is missing
- Assuming MD5 unsupported in hashlib
Solution
Step 1: Understand password storage best practices
Storing passwords securely requires hashing with a strong algorithm and adding a unique salt to prevent attacks like rainbow tables.Step 2: Evaluate options
SHA-256 is stronger than MD5 and SHA-1. Using a unique salt per password improves security significantly.Final Answer:
Use SHA-256 with a unique salt for each password -> Option AQuick Check:
Strong hash + salt = secure password storage [OK]
- Using MD5 without salt thinking it's secure
- Storing passwords as plain text
- Using outdated SHA-1 without salt
