关于比如,sha256,或md5之类的用法,用hashlib很方便。但有两种写法,可以了解一下。
下面是加盐的普通写法,是“盐放在前面的写法”。
一、sha256
# 写法一:
def get_hash_value(pwd,salt):
hash = hashlib.sha256(salt.encode('utf8')) #同一种hash算法得到的长度是固定的
hash.update(pwd.encode('utf8')) #如果文件很大,可以持续读入,而不需要一次性读完
hash_value = hash.hexdigest()
print("f1=>",salt,"+",pwd," =>hash_value",hash_value)
#写法二:
def get_hash_value2(pwd,salt):
h = hashlib.sha256()
_pwd = salt + pwd # 注意顺序,如果反了,就不是原义了。
h.update(_pwd.encode('utf-8')) #如果文件很大,可以持续读入,而不需要一次性读完
hash_value =h.hexdigest()
print("f2=>",salt,"+",pwd," =>hash_value",hash_value)
试验一下,两种写法是否结果相同?
salts =["1","2"]
pwds =["a","b","c"]
for s in salts:
for pwd in pwds:
t0 = t.time()
get_hash_value(pwd,s)
#print("f1=>cost time: ",t.time()-t0,'s')
for s in salts:
for pwd in pwds:
t0 = t.time()
get_hash_value2(pwd,s)
#print("f2=>cost time: ",t.time()-t0,'s')
结果:
可以看出,这两者的结果是相同的。另外,经测试性能,也还不错的。
二、md5
hashlib库中,对于md5和其它加密的方式是一样的,完全可以copy.
def get_hash_value(pwd,salt):
hash = hashlib.md5(salt.encode('utf8')) #同一种hash算法得到的长度是固定的
hash.update(pwd.encode('utf8'))
hash_value = hash.hexdigest()
print("f1=>",salt,"+",pwd," =>hash_value",hash_value)
def get_hash_value2(pwd,salt):
h = hashlib.md5()
_pwd = salt + pwd
h.update(_pwd.encode('utf-8'))
hash_value =h.hexdigest()
print("f2=>",salt,"+",pwd," =>hash_value",hash_value)
经测试,结果也是一样的。