3

そのため、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 から印刷するために使用しているハックです (標準出力ではなく標準エラー出力に出力します)。確かに、私が気付いていない dotcloud でデバッグするためのより良い方法はありますか?

4

1 に答える 1

1

コードでこれを試してください。

  1. uuid をバイトではなく 16 進数に切り替える
  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'])
于 2012-12-10T17:08:04.633 に答える