Flask-Bcrypt 0.5中文文档发布了!

Flask-Bcrypt - flask-bcrypt-docs-zh 0.5 文档

Flask-Bcrypt是一个Flask扩展,它能为你的应用提供bcrypt散列功能。

欢迎批评指正。


Flask-Bcrypt

Flask-Bcrypt是一个Flask扩展,它为你的应用提供了bcrypt散列功能。

得益于近些年来计算机硬件(如GPU)性能的提升,散列技术已经变得很容易被攻破了。想要解决这个问题,一个积极的作法是使用一种“去优化”的散列技术。Bcrypt就是这样一个散列工具;不同于MD5和SHA1等在速度上优化的散列算法,bcrypt被有意地放慢了算法速度。

密码等敏感数据必须被保护起来,而bcrypt正是一个值得推荐的选择。

安装

安装该扩展需要如下命令::

$ easy_install flask-bcrypt

如果你已经安装了pip,可以选择以下这种方式::

$ pip install flask-bcrypt

注解

你需要Python Development Headers作为依赖来安装py-bcrypt包。如果你是在使用Mac OS或者Windows,你可能已经安装了它。如果你使用的不是这两者而是Linux,那你需要根据你的系统来寻找包。如果是基于Dabian的发行版,那就寻找名为python-dev的包;如果基于RedHat的发行版,那就寻找名为python-devel的包。

用法

想要通过扩展简单方便地导入已经包装好了类并且将flask应用传入进去。应该这样做::

from flask import Flask
from flask.ext.bcrypt import Bcrypt

app = Flask(__name__)
bcrypt = Bcrypt(app)

两个基础的散列方法已经包含在了bcrypt对象中。在Python2中,可以这样使用它们::

pw_hash = bcrypt.generate_password_hash(‘hunter2‘)
bcrypt.check_password_hash(pw_hash, ‘hunter2‘) # returns True

在python3中,你需要使用在generate_password_hash()上使用decode(‘utf-8’)方法,如下所示::

pw_hash = bcrypt.generate_password_hash(‘hunter2’).decode(‘utf-8’)

API

class flask_bcrypt.Bcrypt(app=None)

Bcrypt是用来对密码进行散列并检查逻辑的类容器。这个类或许会用来初始化你的flask app对象。这个类的作用是提供一个简单的接口,以重写Werkzeug自带的密码散列功能。

尽管这些方法事实上并没有重写,但API是有意设计得很相似,这可以使那些之前已经使用了散列函数的应用很容易地改写为拥有强大能力的bcrypt。

想要开始使用bcrypt,你可以对你的应用进行如下包装::

app = Flask(__name__)
bcrypt = Bcrypt(app)

现在两个基础的功能函数通过bcrypt已经包含在了app对象中。之后,在应用的上下文(context)中,重要数据(如密码等),可以通过以下操作进行散列::

password = ‘hunter2‘
pw_hash = bcrypt.generate_password_hash(password)

一旦被散列,值是不可逆的。然而,在一些需要确认密码、将两次输入的密码的散列值进行比较的场景下,非常有必要在常数时间(译者注:big-O(n))处理完成。这可以防止时序攻击(timing attacks)。bcrypt提供了一个简单的方法,如下所示::

candidate = ‘secret‘
bcrypt.check_password_hash(pw_hash, candidate)

如果两个密码一致,check_password_hash方法会返回True。如果不一致,返回False。

命名空间的问题

如果你使用bcrypt的形式是bcrypt = Bcrypt(app),需要注意这个问题。你实际上重写了bcrypt模块。尽管你未必会需要操作已经跨出扩展范围的模块,但你应该意识到模块已经被重写了。

或者你可以考虑使用一个不同的名字来避免命名冲突,如flask_bcrypt = Bcrypt(app)。

BCRYPT_LOG_ROUNDS选项可以在flask应用中进行配置,这个值会决定encryption的复杂程度,默认值为12。(详情见bcrypt。)

BCRYPT_HASH_PREFIX选项可以在flask应用中进行配置,这个值可对散列版本进行设定,默认值为2b。(详情见bcrypt。)

bcrypt算法中,密码的默认长度为72位,超出了72位的部分将被忽略。如果散列一个给定的密码,常见的解决方案会使用散列技术(如sha256)中的hexdigest方法来规避没有位的问题,之后使用bcrypt对结果进行散列。如果BCRYPT_HANDLE_LONG_PASSWORDS的值被设定为True,那么上述的解决方案将无法使用。警告:不要在一个已经使用了flask-bcrypt的项目中将此选项设定为True,否则你将会使密码查验的功能无法使用。警告:如果在一个已存在的项目中,此选项已经被设定为True,但你却将它又更改为False,密码查验的功能将无法使用。

参数:

  • app – flask应用对象。默认为空。

check_password_hash(pw_hash, password)

检查散列值与密码是否匹配。密码会被散列,然后在常数时间内与散列值进行比较。这个方法会返回True或者False。

check_password_hash的用法示例如下::

pw_hash = bcrypt.generate_password_hash(‘secret‘, 10)
bcrypt.check_password_hash(pw_hash, ‘secret‘) # returns True

参数:

  • pw_hash – 用来比较的散列值。
  • password – 用来比较的密码。

generate_password_hash(password, rounds=None, prefix=None)

用bcrypt生成一个密码的散列值。指定rounds的值可以对bcrypt.gensalt()的参数log_rounds进行设定,可以用来决定盐的复杂程度,默认值为12。指定prefix的值可以对bcrypt.gensalt()的参数prefix进行高寒,可以决定生成散列值的算法的版本。

generate_password_hash的用法示例如下::

pw_hash = bcrypt.generate_password_hash(‘secret‘, 10)

参数:

  • password – 用以散列的密码。
  • rounds – 设定盐的复杂程度。
  • prefix – 设定算法的版本。

init_app(app)

用扩展对应用进行初始化。

参数:

  • app – Flask应用对象。

flask_bcrypt.generate_password_hash(password, rounds=None)

这个函数对Bcrypt的eponyous方法进行了包装,方便你使用。它期望被作为一个帮助函数,在已经配置好app的情况下使用。在其他情况下,这种非常方便的用法不会使用app对象。

对这个函数而言,简单地将它从模块中导入,并作为一个相似的方法使用是可行的。这里有一个简单的例子::

from flask.ext.bcrypt import generate_password_hash
pw_hash = generate_password_hash(‘hunter2‘, 10)

参数:

  • password - 用来散列的密码。
  • ronuds - 盐的复杂程度。

flask_bcrypt.check_password_hash(pw_hash, password)

这个函数对Bcrypt的eponyous方法进行了包装,方便你使用。它期望被作为一个帮助函数,在已经配置好app的情况下使用。在其他情况下,这种非常方便的用法不会使用app对象。

对这个函数而言,简单地将它从模块中导入,并作为一个相似的方法使用是可行的。这里有一个简单的例子::

from flask.ext.bcrypt import check_password_hash
check_password_hash(pw_hash, ‘hunter2‘) # returns True

参数:

  • pw_hash – 用来比较的散列值。
  • password – 用来比较的密码。
时间: 2024-10-13 21:58:22

Flask-Bcrypt 0.5中文文档发布了!的相关文章

django2.0 官方中文文档地址

django2.0 官方开始发布中文文档了,之前还想着一直翻译完成所有有必要的内容,想着可以省事一些了,打开以后看了一下,发现官方的中文文档还没翻译完成, 现在(2018-7-10)最新章节是是  编写你的第一个 Django 补丁(https://docs.djangoproject.com/zh-hans/2.0/intro/contributing/) django 2.0 官方中文文档地址: https://docs.djangoproject.com/zh-hans/2.0/ 原文地址

[cocos2dx 3.0 + iap]中文文档(转)

一.In App Purchase概览Store Kit代表App和App Store之间进行通信.程序将从App Store接收那些你想要提供的产品的信息,并将它们显示出来供用户购买.当用户需要购买某件产品时,程序调用StoreKit来收集购买信息. 下图即为基本的store kit 模型:Store Kit的API只是为程序添加In App Purchase功能的一小部分.你需要决定如何去记录那些你想要提交的产品,如何在程序中将商店功能展现给用户,还要考虑如何将用户购买的产品 提交.本章的剩

Flutter 中文文档网站 flutter.cn 正式发布!

在通常的对 Flutter 介绍中,最耳熟能详的是下面四个特点: 精美 (Beautiful):充分的赋予和发挥设计师的创造力和想象力,让你真正掌控屏幕上的每一个像素. ** 极速 (Fast)**:基于 Skia 的硬件加速图形引擎,帮助你媲美原生应用的速度. 高效 (Productive):Flutter 的 Stateful Hot Reload (热重载) 特性帮助你实时看到应用修改的结果. 开放 (Open):不管是 Flutter 引擎还是 Dart 开发语言,甚至是工程团队的工作空

Hadoop-2.2.0中文文档—— Common - CLI MiniCluster

目的 使用 CLI MiniCluster, 用户可以简单地只用一个命令就启动或关闭一个单一节点的Hadoop集群,不需要设置任何环境变量或管理配置文件. CLI MiniCluster 同时启动一个 YARN/MapReduce 和 HDFS 集群. 这对那些想要快速体验一个真实的Hadoop集群或是测试依赖明显的Hadoop函数的非Java程序 的用户很有用. Hadoop Tarball 你需要从发布页获取tar包.或者,你可以从源码中自己编译. $ mvn clean install -

Apache Storm 1.1.0 中文文档 | ApacheCN

前言  Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ApacheCN 最近组织了翻译 Storm 1.1.0 中文文档 的活动,整体 翻译进度 为 96%. 感谢大家参与到该活动中来 感谢无私奉献的 贡献者,才有了这份 Storm 1.1.0 中文文档 感谢一路有你的陪伴,我们才可以做的更好,走的更快,走的更远,我们一直在努力 ... 网页地址:

Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置

目的 这份文档描写叙述了怎样安装.配置和管理从几个节点到有数千个节点的Hadoop集群. 玩的话,你可能想先在单机上安装.(看单节点配置). 准备 从Apache镜像上下载一个Hadoop的稳定版本号. 安装 安装一个Hadoop集群,一般包含分发软件到全部集群中的机器上或者是安装RPMs. 一般地,集群中的一台机器被唯一地设计成NameNode,还有一台机器被设置成ResourceManager.这是master(主). 集群中剩下的机器作为DataNode 和 NodeManager.这些是

Hadoop-2.2.0中文文档—— Web应用代理

Web应用代理是YARN的一部分. 默认地,它会作为 Resource Manager(RM)的一部分来运行, 但是也可以配置成独立运行的模式.使用代理的原因就是降低通过YARN的web攻击的可能性. 在YARN中,Application Master(AM) 有责任提供web界面并把链接发给RM.这给一些可能的问题打开了大门. RM 作为一个可信的用户在运行,访问那个web地址的用户会认为可信,它提供的链接也会被认为可信,但当实际上AM作为一个不被信任的用户运行,它给RM的链接可能指向任何恶意

Hadoop-2.2.0中文文档—— Common - 超级用户模拟别的用户

pcDuino3下支持mmc启动,官方的Uboot是采用SPL框架实现的,因为内部的SRAM空间达到32K,我们完全可以在这32K空间内编写一个完整可用小巧的bootloader来完成引导Linux kernel的目的. 我们首先介绍下SPL框架,可以先看下<GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法>和<GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析>,NAND_SPL也算是SPL框架下的一种模式. 当使用Nand f

Hadoop-2.2.0中文文档—— 从Hadoop 1.x 迁移至 Hadoop 2.x

简介 本文档对从 Apache Hadoop 1.x 迁移他们的Apache Hadoop MapReduce 应用到 Apache Hadoop 2.x 的用户提供了一些信息. 在 Apache Hadoop 2.x 中,我们已经把资源管理功能放入 分布式应用管理框架 的Apache Hadoop YARN,而 Apache Hadoop MapReduce (亦称 MRv2) 保持为一个纯分布式计算框架. 总之,之前的 MapReduce 运行时 (亦称 MRv1) 已经被重用并且不会有重大