我正在制作一个Django项目,它将在不同的环境中本地托管。
我希望用户能够通过在触摸屏或键盘上输入六位数的PIN来登录,而不必键入冗长的用户名/密码。
我需要在数据库中存储用户的PIN。我希望PIN以某种方式散列或加密,使其在数据库中不可见。PIN(因此它的哈希值)必须是唯一的,但每次也必须转换为相同的值。例如,每次输入123456时,都需要将其转换为"jhs8d67RandomString34kds"因此,没有两个用户可以保存相同的PIN,因为DB列将是唯一的。
我需要知道如何更改用户输入的整数并将其散列以保存在数据库中。
然后我需要知道当用户输入PIN时如何比较它。
我真的需要一些关于如何实现这一点的例子,而不是告诉我为什么这是"不安全的"。或者不工作
如有任何意见,不胜感激。
- 哈希并不能保证安全
- 所有的哈希函数都有冲突,唯一的区别是概率
- 整数已经实现了哈希函数,只需使用
- 请注意,出于安全原因,字符串的散列在每个python进程中是随机的。所以这些哈希不能用于持久数据
可以使用module-hashlib:
import hashlib
pincode = "123456"
hashlib.md5(pincode).hexdigest()
'e10adc3949ba59abbe56e057f20f883e'
你也可以这样做:
if hashlib.md5(pincode).hexdigest() == 'e10adc3949ba59abbe56e057f20f883e':
you code here
...
或者使用hashlib.pbkdf2_hmac用盐:
hashlib。pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)
import hashlib
dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
dk.hex()
'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'