The Weaknesses of MD5, SHA1 and SHA-256 — The Length Extension Attack

The foundation of trust in cybersecurity is layed by the simple concept of data hashing, and where we take data and create a fixed-length hash for the data. If we cannot trust our hashing methods, we are in trouble. When we creating the perfect message hash, we thus need to make sure we have:

  • Pre-image resistance. If we already have a hash value (h), it should be extremely difficult to find a message which will give the same hash. Thus for a given hash (h), it is difficult to find a message (M1) for H(M1)=h.
H(Password || Message)
H(Password || Original Message || New Message)
import hashpumpy
import hashlib
import sys
message= b'message'
addition = b'addition'
if (len(sys.argv)>1):
if (len(sys.argv)>2):
if (len(sys.argv)>3):
# Compute a previous hash for H(Password || Message)m = hashlib.sha1()
print ("Previous hash: ",rtn)
# Compute a hash for H(Password || Message || Addition)rtn = hashpumpy.hashpump(rtn, message, addition, len(password))
print ("New hash: ",rtn[0])
print ("New message: ",rtn[1])
m = hashlib.sha1()
print ("Computing new hash (password+newdata): ",rtn)
Previous hash:  22583ca8f00efff6296b4b571b9c2e1bcf22a99a

New hash: dd448d0874b738ca1b85bc00e151fbf16393ce4a
New message: b'message\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00xaddition'
Computing new hash (password+newdata): dd448d0874b738ca1b85bc00e151fbf16393ce4a

Professor of Cryptography. Serial innovator. Believer in fairness, justice & freedom. EU Citizen. Auld Reekie native. Old World Breaker. New World Creator.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store