Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- text = input("Please Enter Text To Be Hashed:")
- def main(data):
- bytes = ""
- h0 = 0x67452301
- h1 = 0xEFCDAB89
- h2 = 0x98BADCFE
- h3 = 0x10325476
- h4 = 0xC3D2E1F0
- for n in range(len(data)):
- bytes+='{0:08b}'.format(ord(data[n]))
- bits = bytes+"1"
- pBits = bits
- #Pad Text To Equal 448 mod 512
- while len(pBits)%512 != 448:
- pBits+="0"
- #Append The Original Length
- pBits+='{0:064b}'.format(len(bits)-1)
- #Text is divided in 512 bit chunks
- def bits(l, n):
- return [l[i:i+n] for i in range(0, len(l), n)]
- def bits1(n, b):
- return ((n << b) | (n >> (32 - b))) & 0xffffffff
- for c in bits(pBits, 512):
- words = bits(c, 32)
- w = [0]*80
- for n in range(0, 16):
- w[n] = int(words[n], 2)
- for i in range(16, 80):
- w[i] = bits1((w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16]), 1)
- a = h0
- b = h1
- c = h2
- d = h3
- e = h4
- #Hashing Process
- for i in range(0, 80):
- if 0 <= i <= 19:
- f = (b & c) | ((~b) & d)
- k = 0x5A827999
- elif 20 <= i <= 39:
- f = b ^ c ^ d
- k = 0x6ED9EBA1
- elif 40 <= i <= 59:
- f = (b & c) | (b & d) | (c & d)
- k = 0x8F1BBCDC
- elif 60 <= i <= 79:
- f = b ^ c ^ d
- k = 0xCA62C1D6
- temp = bits1(a, 5) + f + e + k + w[i] & 0xffffffff
- e = d
- d = c
- c = bits1(b, 30)
- b = a
- a = temp
- h0 = h0 + a & 0xffffffff
- h1 = h1 + b & 0xffffffff
- h2 = h2 + c & 0xffffffff
- h3 = h3 + d & 0xffffffff
- h4 = h4 + e & 0xffffffff
- return '%08x%08x%08x%08x%08x' % (h0, h1, h2, h3, h4)
- print (main(text))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement