【问题标题】:Python on Dotcloud Crashes on certain functionsDotcloud 上的 Python 在某些函数上崩溃
【发布时间】:2012-11-27 09:31:17
【问题描述】:

所以我在 dotcloud 上运行一个烧瓶 python 应用程序,我基本上是在尝试散列密码(使用 hashlib.sha512;盐是 uuid.uuid4().bytes)。

user_dict['salt'] = uuid.uuid4().bytes
print_stderr(user_dict['salt'])
print_stderr(hashlib.sha512(user_dict['pwd'] + user_dict['salt']))
user_dict['pwd'] = hashlib.sha512(user_dict['pwd'] + user_dict['salt']).digest()
print_stderr(user_dict['pwd'])

即使在 dotcloud 上的 python 解释器中,这一切都可以正常工作,但是当我在服务器上实际运行代码时,它会崩溃(或者,客户端获取 HTTP 500 代码,但 dotcloud 日志刚刚关闭)。

我可以判断哪些print 语句被执行,哪些不是,它在uuid.uuid4().bytes 行上崩溃。但是如果我用一个常量(例如“uehg83yydh”)替换它,它不会立即失败,而是在hashlib.sha512(...).digest() 行上。

您可能还注意到print_stderr 不是标准的python 函数。这是我用来让 dotcloud 从 python 打印东西的 hack(它打印到 stderr 而不是 stdout)。肯定有我不知道的更好的在 dotcloud 上进行调试的方法吗?

【问题讨论】:

  • 你用的是什么版本的python?崩溃时是否有任何错误消息?在 /var/log/supervisor 中查找不同的日志文件。
  • 我使用的是 2.7(python_version:dotcloud.yml 中的 v2.7)。 CLI 日志查看器中没有错误消息,它只是停止。但是在 uwsgi.log 文件中有一些 CLI 查看器没有显示的 strange characters
  • 您可以发布这些日志吗?您使用的是沙盒还是现场风味?
  • 我正在使用沙箱进行开发。无论如何,这部分代码奇迹般地开始工作了。现在有一个新问题,但似乎更容易解决:pastebin.com/vyfn5hwu 似乎 uuid 或 hashlib(或两者)没有正确编码。

标签: python uuid dotcloud


【解决方案1】:

为您的代码试试这个。

  1. 将 uuid 切换为十六进制而不是字节
  2. 改为使用 update() 而不是将字符串加在一起,这样会更简洁一些。

代码:

>>> user_dict['salt'] = uuid.uuid4().hex
>>> print_stderr(user_dict['salt'])
>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update(user_dict['pwd'])
>>> m.update(user_dict['salt'])
>>> user_dict['pwd'] = m.hexdigest()
>>> print_stderr(user_dict['pwd'])

【讨论】:

  • 这似乎已经解决了,但是在阅读了更多关于密码存储的信息后,我决定使用 bcrypt,而不是搞乱我自己可能非常不安全的实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多