hmac-md5加密防破解

2020-04-18  本文已影响0人  huashen_9126

普通md5加密,容易被破解,如:

import hashlib

print(hashlib.md5(b'123456').hexdigest())

的结果在https://pmd5.com/
上可以被轻易破解出来

增加一个salt来使得相同的输入也能得到不同的哈希,这样,大大增加了黑客破解的难度。如果salt是我们自己随机生成的,通常我们计算MD5时采用md5(message + salt)。
hmac模块实现了标准的Hmac算法

import hmac, random

def hmac_md5(key, s):
    return hmac.new(key.encode('utf-8'), s.encode('utf-8'), 'MD5').hexdigest()

class User(object):
    def __init__(self, username, password):
        self.username = username
        self.key = ''.join([chr(random.randint(48, 122)) for i in range(20)])
        self.password = hmac_md5(self.key, password)

db = {
    'michael': User('michael', '123456'),
    'bob': User('bob', 'abc999'),
    'alice': User('alice', 'alice2008')
}

def login(username, password):
    user = db[username]
    return user.password == hmac_md5(user.key, password)

assert login('michael', '123456')
assert login('bob', 'abc999')
assert login('alice', 'alice2008')
assert not login('michael', '1234567')
assert not login('bob', '123456')
assert not login('alice', 'Alice2008')
print('ok')
上一篇下一篇

猜你喜欢

热点阅读