通常は 16 進数で保存しますが、MySQL 内にバイナリで保存すると、スペースの半分を節約できることに気付きました。バイナリで保存する場合に注意すべき問題はありますか?
4 に答える
いくつのパスワードを保存する予定ですか? スペースの半分は、あなたにとって本当に意味がありますか?
おそらく、アプリケーションではパスワードを 16 進形式で表しているため、パスワードをバイナリで格納すると、それらのパスワードに対して何らかの操作を実行するときに、複雑さが増し、オーバーヘッドが処理されます。
私の意見では、わずかなスペースを節約する方法ではなく、作業に便利な方法で保管する必要があります。
編集:
いくつかの仮定を立てて、この機会を利用して、もう少しお手伝いします。
パスワードは 16 進数であるため、使用していないと仮定します。使用していないcrypt
場合は、使用する必要があります。最悪のシナリオでは、あなたは md5 を使用しています...そして神は子猫を殺しています。
スタック オーバーフロー時の bcrypt については既に多くの質問と回答があるため、ここではその情報については説明しません。
ただし、 SHA512 対 Blowfish および Bcryptの質問は、開始するのに適した場所です。
また、件名に関する@ircmaxellのブログ投稿をいくつか読んでください。
使いやすさの観点からは、ハッシュを 16 進数として保存するのがおそらく最善です。それらをバイナリで保存するということは、平文入力と保存されたパスワードを比較するために、もう 1 つのステップが必要になることを意味します。また、あなたが先に進んだ後、あなたのプロジェクトに取り組む人に混乱の層を追加する可能性もあります. 「なぜこのパスワードはバイナリで保存されているのですか?」
免責事項: 本当のことを言いましょう。この質問は、純粋に意見に基づくものとしてクローズされるかの境界線上にある必要があります。したがって、得られる答えは好みと経験の問題です。
この質問に対する私の常識的な答えを追加するだけです。暗号化ツール/方法から取得した方法で保存する必要があります。
優れた暗号化には、encrypt
およびdecrypt
またはのcompare
方法があります。通常、の出力は、 /encrypt
への入力として渡す必要があるものです。decrypt
compare
どのような出力encrypt
が生成されても、それを格納する方法として優先する必要があります。
バイナリ、16 進数、base64 など、出力を好きな形式に変換したり、ペンと紙を使って書き留めたりすることができます。暗号化された値は多かれ少なかれ安全になることはありません。値を見つけた人は、それを復号化するための暗号化キーが必要になります。
ただし、何かを変換するたびに、元の状態に戻す必要もあります。つまり、潜在的な問題の新しいレイヤーを追加し、プロセス全体にオーバーヘッドを追加します。無視できるかもしれませんが、それでも、まったく実行しないよりも複雑/低速です。