所以我在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 上进行调试?