pbkdf2 算法 C语言实现,密码学基础之PBKDF2算法

站点登录需要输入用户名和密码,而密码属于个人敏感数据,应当只保存密码的单向哈希值。简单的哈希值,无法防止彩虹表攻击,使用基于口令的密钥派生算法PBKDF2可以解决这种问题。

PBKDF2 需要以下输入:

哈希算法

密码

盐值

迭代次数

哈希算法:建议选择SHA256或更安全的算法

密码:用户的输入值

盐值:建议最少8个字节,应使用安全的随机数

迭代次数:建议迭代10000次左右,对于性能有特殊要求的可迭代1000次

PBKDF2还有dk_len参数,通常用不到,本文省略。

下面是Python的演示代码:

# Python 3.4+

import hashlib, binascii

def retrieve_data_from_database(user):

"""从数据库获取指定用户密码的PBKDF2哈希值,这里只是演示

"""

data = {'yang': b'e75dfdc937acc5b7fccb2bc4237f75248c5bbe01797f70049be8abf43e55be44'}

return data[user]

def validate_password(user, password):

"""验证密码是否正确

password的PBKDF2哈希值和存储的PBKDF2哈希值比较,相同则验证通过

"""

salt = b'\x7d\xef\x87\xd5\xf8\xbb\xff\xfc\x80\x91\x06\x91\xfd\xfc\xed\x69'

dk = hashlib.pbkdf2_hmac('sha256', password, salt, 10000)

saved_data = retrieve_data_from_database(user)

return binascii.hexlify(dk) == saved_data

def login(user, password):

"""用户登录演示

"""

if not validate_password(user, password):

print('user or password error')

# 其它逻辑

相关文章

参考文献

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值