使用Flask密钥创建过程了解环境变量

时间:2015-12-11 00:00:10

标签: python python-2.7 flask cryptography flask-login

我正在使用Python 2.7跟随Mac上的Flask教程,引导您构建一个具有用户登录名和密码功能的简单博客。

登录系统基于Flask-Login module

最初的步骤是在应用程序目录的config.py文件中设置一个密钥,如下所示:

export BLOGFUL_SECRET_KEY="your_secret_key_here"

我知道SECRET_KEY用于加密保护应用程序,因为将应用程序的密钥存储在应用程序配置本身并不是一个好主意,对吗?因此,我们使用os.environ.get从环境变量中获取密钥。

为了实现这一点,教程说必须通过命令行导出环境变量:

BLOGFUL_SECRET_KEY

这会设置一个名为{{ knp_pagination_render(requests)|raw|nl2br}} 的环境变量 - 但是使用此环境变量创建的密钥究竟是多少?

2 个答案:

答案 0 :(得分:2)

直接回答您的两个问题:

  1. 密钥存储在源代码外部,因此它们不会提交修订控制。
  2. 通过导出环境变量,密钥不会创建,也不会使用环境变量中的值创建。
  3. 您可能真正关注的信息:

    首先,请记住,我是密码学专家!随之而来......

    您需要做的是为您的应用程序生成适当大小和加密安全性的秘密,然后将环境变量设置为该值。

    我猜测秘密密钥与您链接到的Flask-Login模块的flask.ext.login.make_secure_token方法有关。如果是这种情况,查看源代码,该密钥将与HMAC一起用于SHA-512。理想情况下,密钥应与算法使用的块大小相同,在这种情况下,对于512位HMAC,Python 2.7 hmac implementation的源指示为64。如果密钥小于块大小,则用零填充;如果更大,它将深入到块大小。

    Flask quickstart documentation section for sessions提供了一个由Python's os.urandom documentation备份的示例,用于生成用于密钥的密码学上合适的随机字节。我会改变他们的例子,因为我们想要一个64块的块大小而不是24块的键是:

    import os
    os.urandom(64)
    

    获取结果并将环境变量设置为该值。直接使用Flask示例(不要将这些值用于代码):

    >>> import os
    >>> os.urandom(24)
    '\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
    

    您将获取输出,并将环境变量设置为该值:

    export BLOGFUL_SECRET_KEY='\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
    

答案 1 :(得分:0)

没有意识到设置密钥的实际命令是:

export BLOGFUL_SECRET_KEY="your_secret_key_here"

使用Python解释器可以使用类似的东西生成密钥:

>>> import os
>>> os.urandom(24)
'\x072\xe7E|ns\x18g\x80& \xa3\xbf\xed\x91\xe6\x08+\x88\xd6\xafe['