站点登录需要输入用户名和密码,而密码属于个人敏感数据,应当只保存密码的单向哈希值。简单的哈希值,无法防止彩虹表攻击,使用基于口令的密钥派生算法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')

# 其它逻辑

相关文章

参考文献

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

  1. php 红包算法,PHP语言:实现微信红包拆分算法

    本文主要向大家介绍了PHP语言:实现微信红包拆分算法,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. · 修复最后一个红包输出未保留2位数 · 修复领取的红包金额低于最小红包限制 * 红 ...

  2. 人工免疫算法c语言实例,毕业设计_蚁群算法模拟系统的设计与实现.doc

    J I A N G S U U N I V E R S I T Y 本 科 毕 业 论 文 蚁群算法模拟系统的设计与实现 Ant Colony Simulation System Design and ...

  3. 【数据结构与算法——C语言版】1. 数据结构与算法简介

    概念 数据结构:"一组数据的存储结构" 算法:"操作数据的一组方法" 数据结构是为算法服务的,算法是要作用再特定的数据结构上的. 简言之,在编程实践中,我们可能 ...

  4. java超级素数算法_计算机二级VB基础之素数算法

    众所周知计算机二级VB考试除了考察累加.最值.约数因子以及进制转化之外还会考察素数的算法.那么到底二级VB中的素数算法是怎么样的呢?为此在本文中课课家笔者就为大家简单介绍其含义和具体的算法,并给出相应 ...

  5. 栅格法路径算法C语言,基于地图栅格与QPSO算法结合的机器人路径规划方法与流程...

    本发明属于机器人路径规划领域,提出一种基于地图栅格与QPSO结合的机器人路径规划方法. 背景技术: 移动机器人路径规划是寻找一条无碰撞的可行路径问题的方法.近些年,群智能优化算法逐渐成为移动机器人路径 ...

  6. 机械臂运动学算法c语言,6轴工业机械臂运动学算法(C++) 六轴机械臂运动学源码 - 下载 - 搜珍网...

    6轴工业机械臂运动学算法 6轴工业机械臂运动学算法\.cproject 6轴工业机械臂运动学算法\.project 6轴工业机械臂运动学算法\.settings 6轴工业机械臂运动学算法\.setti ...

  7. 极值跟踪算法 c语言,快速约束极值子空间跟踪算法_魏志强.pdf

    快速约束极值子空间跟踪算法_魏志强 34 4 Vol. 34 No. 4 第 卷第 期 华 北 水 利 水 电 学 院 学 报 2013 8 Journal of North China Instit ...

  8. 基础密码算法c语言实现,国密SM2密码算法的C语言实现

    邢维哲 [摘要] N.Koblitz和V.Miller在1985年各自獨立地提出将椭圆曲线应用于公钥密码系统.SM2椭圆曲线密码算法是国家密码管理局批准的一组算法,在电力自动化通讯中得到了广泛应用.本 ...

  9. 异或校验算法 c语言程序,C# 异或校验算法

    C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...

最新文章

  1. 求主析取范式与主合取范式
  2. Swift3的playground中对UI直接测试支持的改变
  3. VOA,with me
  4. Symbian编程总结-图形图像篇-打开非Bitmap类型的图像
  5. java 初级编程题_java基础经典编程题
  6. LeetCode 153 寻找旋转排序数组中的最小值
  7. 关于nginx rtmp的一点配置
  8. JS多维数组转一维数组递归降维-数组扁平化
  9. c语言 自动答题器,单片机原理作业—电子答题器(课程及设计).doc
  10. Ant Design vue 表格内换行
  11. Windows提示:您的许可证即将过期
  12. ubuntu20.04 noetic 安装 Astra Pro 驱动
  13. 微信小程序介绍、区别
  14. Nodejs之解决接口跨域问题
  15. 计算机夏令营英语怎么说,“夏令营”英语怎么说
  16. WEB页面SEO —— 网站TDK优化细节
  17. 2019年帮解BUG,做设计,Android,WEB
  18. Java算法:回文数
  19. super()和this()
  20. Android 折叠屏 适配

热门文章

  1. 3.1 随机抽取 50 个网络购物的消费者,调查他们某月的网购金额,结果如下表所示
  2. 面试官问我like如何优化
  3. C语言之复合赋值运算符
  4. 20210519: 人脸识别-人脸口罩数据
  5. 十行代码在旧手机上快速安装homeassistant
  6. 【最全的最准确的镜像源网址】
  7. C# 8进制 16进制 转 rgb
  8. cf-366C-Dima and Salad
  9. 如何成为 10 倍程序员
  10. 男人总会对女人的外表失去兴趣