私は、ユーザデータをpostgresテーブルに格納しているPythonサーバを持っている。私はdbのためにSQLiteを使い始めましたが、問題はありませんでしたが、postgresに変換すると、私はencr_password
のユニコード符号化文字列を格納する問題に遭遇しました。符号化されたUnicode文字列をPostgresに保存するが、異なるランダムな文字列を取得する
CREATEuser
格納する。このデータ:
{'fname': ['John'], 'encr_password': [b'$2b$14$NvAJc1nxSRpQnuK5iAUxyeMN9wobMShjUYxCpANlsYUn8M1qir1Tq'], 'email': ['[email protected]'], 'lname': ['Doe']}
しかし、私が受け取る私のPostgresサーバからのデータを検索するとき:もう一度
[{'encr_password': '\\x243262243134244675375137324b4953614c5a70706354355a756d712e77433365576d42554e4f47315a486c43593958353454474248494969726b43', 'fname': 'John', 'user_id': 1, 'email': '[email protected]', 'lname': 'Doe'}]
を私の検索は、私が期待まさに戻り、その初期に保存されていますSQLiteを使用しているときにフォーム。
- Pythonのサーバー3.5.2
- 3.1.1
「ユニコード符号化文字列」には実際には任意のバイナリデータが含まれていましたが、実際には開始文字列ではありませんでした。 'encr_password'のためにテキストの使用を止めるか、16進やbase64のようなデータをコード化するテキストフレンドリーな方法を使うべきです。 –
私がabt bcryptを読んだところからパスワードと塩をbase64にハッシュします。私はちょうどbcryptライブラリによって要求される検証チェックのためにUTF-8にそれをあらかじめエンコードしておいたと思います。それが必要になるまでエンコーディングを削除すると、DBにVARCHAR(255)として保存するのは間違っていますか? p.s.私の質問に既に答えて、すばやく反応してくれてありがとう! –
これは* base64ではありません。私はbcrypt関数が自動的にそれをbase64に変換するとは思わないでしょう...出力は単純にバイナリデータです。これを適切なテキストに変換するには、base64を自分で使用する必要があります。 –