想要对两个字符串进行哈希处理,以下代码将引发错误,SHA 256只能对一个值进行哈希处理。
还有其他方法可以散列两个参数吗?
sign =hex(hashlib.sha256(secret,param_str))
TypeError: sha256() takes at most 1 argument (2 given)
答案 0 :(得分:1)
https://docs.python.org/2/library/hashlib.html中描述了一些方法)
一些例子。
方法1:
import hashlib, binascii
def generate_hash1(secret, param_str):
bsecret = secret.encode('utf-8')
bparam_str = param_str.encode('utf-8')
dk = hashlib.pbkdf2_hmac('sha256', bsecret, bparam_str, 100000)
return binascii.hexlify(dk)
方法2:
import hashlib
def generate_hash2(secret, param_str):
dk = hashlib.sha256()
bsecret = secret.encode('utf-8')
bparam_str = param_str.encode('utf-8')
dk.update(bsecret)
dk.update(bparam_str)
return dk.hexdigest()
方法3(相当于方法2)
import hashlib
def generate_hash3(secret, param_str):
dk = hashlib.sha256()
s = secret + param_str # concatenate strings, then hash
dk.update(s.encode('utf-8'))
return dk.hexdigest()
结果
print(generate_hash1("my secret", "password")) #b'8843eb1e289740e6379eed8191497788dd527164beafce1fb09e7f60adb54e1d'
print(generate_hash2("my secret", "password")) # 45bf5f14029ae0e54807be1ed048bb82d33c2100781b03007f989744961a49a9
print(generate_hash3("my secret", "password")) # 45bf5f14029ae0e54807be1ed048bb82d33c2100781b03007f989744961a49a9