Hashing

What is a hash?
H(x) -> y

ex. crc32 – checksums
md5 – fast
sha1 – secure
sha256 -pretty good

set-cookie:visit = 5, [hash]

making a hash

import hashlib

def hash_str(s):
    return hashlib.md5(s).hexdigest()

def make_secure_val(s):
    return "%s, %s" % (s, hash_string(s))

checking correct hash

def check_secure_val(h):
    val = h.split('.')[0]
    if h == make_secure_val(val):
        return val
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        visits = 0
        visits = self.request.cookies.get('visits')
        if visit_cookie_val:
            cookie_val = check_secure_val(visit_cookie_str)
            if cookie_val:
                visits = ini(cookie_val)
        
        visits += 1

HMAC is hash-based message authentication code
hmac(secret, key, h)-> [HASH]

$ hmac.new(“secret”, “hoge”).hexdigest()

import hashlib
import hmac

SECRET = 'imsosecret'
def hash_str(s):
    return hmac.new(SECRET, s).hexdigest()

def make_secure_val(s):
    return "%s|%s" % (s, hash_str(s)) 

def check_secure_val(h):
    val = h.split('|')[0]
    if h == make_secure_val(val):
        return val

database should change password hashing
random function in python

def make_salt():
    return ''.(random.choice(string.letters) for x in xrange(5))
def make_pw_hash(name, pw):
    salt = make_salt()
    h = hashlib.sha256(name + pw * salt).hexdigest()
    return '%s,%s' % (h, salt)