Python 3.x 在Python3中对变量进行散列

Python 3.x 在Python3中对变量进行散列,python-3.x,variables,hash,passwords,md5,Python 3.x,Variables,Hash,Passwords,Md5,我正在使用Python3,我需要知道如何在Python3中对变量而不是字符串使用哈希 我的榜样; 这是我目前正在尝试使用的代码,但它不起作用 foundpassencypt = hashlib.md5(b(pwd)) print(foundpassencypt.hexdigest()) pwd是在我的程序之前输入的字符串 pwd = "Password" 我知道如果它是一根绳子,它会像这样排列 foundpassencypt = hashlib.md5(b"Password") print

我正在使用Python3,我需要知道如何在Python3中对变量而不是字符串使用哈希

我的榜样; 这是我目前正在尝试使用的代码,但它不起作用

foundpassencypt = hashlib.md5(b(pwd))
print(foundpassencypt.hexdigest()) 
pwd是在我的程序之前输入的字符串

pwd = "Password"
我知道如果它是一根绳子,它会像这样排列

foundpassencypt = hashlib.md5(b"Password")
print(foundpassencypt.hexdigest()) 
这是完整的代码(它使用Python3、sqllite和)(“Else:”在我发布代码时不合适,在我的代码中是正确的)

您不需要
b()

输出:

dc647eb65e6711e155375218212b3964

UPD。哈希算法不支持unicode,因此您必须对sring进行编码。有关详细信息,请参见python

在散列字符串变量之前,应首先对其进行编码

例如:

a = "123321"
print(hashlib.md5(a.encode('utf-8')).hexdigest())

不要使用MD5对密码进行哈希运算

它是非常不安全的,原因有很多,其中最重要的一个原因是任何哈希的单个迭代都是不够的,另一个原因是现在可以生成MD5冲突(并且已经能够生成多年)

使用具有高迭代计数/工作因子的PBKDF2、BCrypt、SCrypt或Argon2散列密码

请注意,我在中确实有一个粗略但功能强大的Python2.7 PBKDF2示例。呼叫的一个示例是:

BinaryOutput = pbkdf2_math.pbkdf2_bin(args.password, args.salt, args.iterations, args.outputBytes, hashlib.sha512)
或者,使用调用PBKDF2、BCrypt、SCrypt或Argon2


在所有情况下,使用足够高的迭代次数或工作系数;首先,可能需要1/10或1/100秒的时间来散列单个密码(这将在您的系统上只使用一个核心,因此多核心系统可以同时执行多个密码)。

TypeError:Unicode对象必须在散列之前进行编码,然后需要对其进行编码,因为散列算法不支持Unicode。您仍然不需要
b
如何“对其进行编码,因为哈希算法不支持unicode。”?我已经将其包含在上面的代码中,
pwd.encode('utf-8')
部分另一个答案也是这样,不要使用MD5对密码进行哈希。不要只使用一轮任何散列来散列密码。请务必使用具有足够高的迭代计数/工作系数的BCrypt、SCrypt、PBKDF2或Argon2来散列密码。这会给我一个错误
AttributeError:“bytes”对象没有属性“hexdigest”
a = "123321"
print(hashlib.md5(a.encode('utf-8')).hexdigest())
BinaryOutput = pbkdf2_math.pbkdf2_bin(args.password, args.salt, args.iterations, args.outputBytes, hashlib.sha512)