美文网首页网络编程
密码学基础之PBKDF2算法

密码学基础之PBKDF2算法

作者: redexpress | 来源:发表于2018-04-03 14:12 被阅读529次

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

PBKDF2 需要以下输入:

  1. 哈希算法
  2. 密码
  3. 盐值
  4. 迭代次数

哈希算法:建议选择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')
    # 其它逻辑

相关文章

密码学基础系列

参考文献

[NIST] Recommendation for Password-Based Key Derivation: Part 1: Storage Applications

相关文章

  • 密码学基础之PBKDF2算法

    站点登录需要输入用户名和密码,而密码属于个人敏感数据,应当只保存密码的单向哈希值。简单的哈希值,无法防止彩虹表攻击...

  • PBKDF2算法

    PBKDF2(Password-Based Key Derivation Function)的介绍PBKDF2算法...

  • mosquitto鉴权插件mosquitto-auth-plug

    mosquitto-auth-plug PBKDF2加密 PBKDF2其实就是选择一种哈希算法,把密码加盐后经过多...

  • 技术科普 | 国密算法在Ultrain区块链中的运用

    密码学是区块链的基础,区块链中大量采用了密码学算法,包括对称加密、非对称加密、单向散列算法、数字签名等技术。 为了...

  • 0. 密码学专题 - 概述

    密码学专题 - 概述 本人打算整理一份关于密码学基础知识的专栏。主要参考了这些书籍:《应用密码学:协议、算法与C源...

  • 密码学系列之:1Password的加密基础PBKDF2

    简介 1password是一个非常优秀的密码管理软件,有了它你可以轻松对你的密码进行管理,从而不用再考虑密码泄露的...

  • Java基础—数据摘要算法解析

    Java基础—数据摘要算法解析 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数...

  • 常见密码算法原理

    PBKDF2是什么? PBKDF2(Password-Based Key Derivation Function)...

  • 个人理解的区块链

    基础技术 P2P通信结合共识机制(分布式算法),达到非中心化网络结构 密码学基于密码学,使信息被客观记录且难以篡改...

  • iOS的双向验证机制 + 各种加密算法

    代码签名 hash算法:密码学中的基础算法,常用的有MD5和SHA,最终要的是就是不可逆和无冲突,所以对代码或者数...

网友评论

    本文标题:密码学基础之PBKDF2算法

    本文链接:https://www.haomeiwen.com/subject/rubqhftx.html