出于学习目的,我正在构建一个网站,其中包括用户注册和后续帐户激活功能。我使用Flask 0.12.2和Python 3.6.1。
我正在根据他们的登录信息为每个用户生成一个激活令牌,如下所示:
from werkzeug import security
activation_token = security.generate_password_hash('login', method='pbkdf2:sha512')
然后我打算向用户发送一个链接,该链接将包含生成的activation_token
作为GET参数或仅作为URL的一部分。所以,我想确认生成的令牌只能包含ASCII字符(以避免任何问题,因为它将成为URL的一部分)。我无法找到有关生成哈希的字符可能包含的信息,无论是official werkzeug
documentation page还是Wikipedia article on PBKDF2。
尽管如此,我目前的猜测/理解是哈希是用Base64编码生成的,如Wikipedia Base64 article中所述(突出显示是我的):
Base64是一组类似的二进制文本编码方案,以ASCII字符串格式表示二进制数据 ...
因此,散列必须是ASCII。但同样的Wikipedia article, mentions(再次,亮点是我的):
选择用于表示基数的64个位值的特定64个字符集在实现之间变化。 ... 例如,MIME的Base64实现使用A-Z,a-z和0-9作为前62个值。 其他变体分享此属性,但为最后两个值选择的符号不同;一个例子是UTF-7。
并且listed Base64 table包含+
和\
作为表格的最后两个字符(如果这些字符成为网址的一部分,则可能会出现问题)。
我的问题是:
security.generate_password_hash('login', method='pbkdf2:sha512')
生成的哈希将采用Base64编码?security.generate_password_hash
使用的Base64表格中最后两个字符是什么?