我需要在Django中散列一个PIN,它总是相同的



我正在制作一个Django项目,它将在不同的环境中本地托管。

我希望用户能够通过在触摸屏或键盘上输入六位数的PIN来登录,而不必键入冗长的用户名/密码。

我需要在数据库中存储用户的PIN。我希望PIN以某种方式散列或加密,使其在数据库中不可见。PIN(因此它的哈希值)必须是唯一的,但每次也必须转换为相同的值。例如,每次输入123456时,都需要将其转换为"jhs8d67RandomString34kds"因此,没有两个用户可以保存相同的PIN,因为DB列将是唯一的。

我需要知道如何更改用户输入的整数并将其散列以保存在数据库中。

然后我需要知道当用户输入PIN时如何比较它。

我真的需要一些关于如何实现这一点的例子,而不是告诉我为什么这是"不安全的"。或者不工作

如有任何意见,不胜感激。

  1. 哈希并不能保证安全
  2. 所有的哈希函数都有冲突,唯一的区别是概率
  3. 整数已经实现了哈希函数,只需使用
  4. 请注意,出于安全原因,字符串的散列在每个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'

相关内容

  • 没有找到相关文章

最新更新