binary/base64/hex最終的に、update関数で暗号したデータと、final関数で得たチェック用終端データを繋げたデータを返すことで、後で復号化できるデータすることができます。ソルト「ソルト(Salt)」は、パスワードをハッシュ化する際に利用される、特定のバイト長のランダムな値です。ソルトを利用しない場合、同一のパスワードからは同一のハッシュ値が生成されることになり、安全性が低くなります。他方、ソルトを利用することで、パスワードは同じでも、異なるハッシュ値が生成できるため、仮にハッシュ化したパスワードが流出しても、元のパスワードを特定ことはより困難になります。ソルトはデータサイズは自由に決めることができますが、通常16バイト以上とするのが良いとされています。サルト自体の値は第三者に知られてしまっても、すぐに変更すれば問題はありません。IV(初期化ベクトル)「IV(初期化ベクトル)」も、サルト同様に暗号化するために利用される決まったデータサイズをもつランダムな値です。こちらはサルトによって生成した同じ鍵を使用した際にも、それを用いて複数暗号化する場合に、異なるIVを使うことで、暗号化時に最初のブロックを替えて、同じ結果の暗号データとならないようにすることが可能になります。IVのデータサイズは最初のブロックサイズによって異なり、暗号化アルゴリズムによって決まる値となります。IVの値を変えずに、何回も暗号化をした場合、データを比較したときに、ハッシュ化された鍵部分のデータも推測されやすくなるため、暗号化一回ごとにIVを新しく生成する必要があるとされています。IVの値自体は第三者に知られても、特に問題はありません。暗号化と対になる機能が「復号化」で、可逆暗号で運用したいなら必ずセットで実装しなければならない機能です。復号化するロジックメソッドもサーバー側で準備しておきます。decrypted.toString("utf8");};この復号化のメソッドを使って、クライアント側からリクエストされる暗号化された文字列(Base64やHEX等)を以下のような処理で復号化し、元の文字列を抽出するなどします。このとき、update関数を繰り返しの回数は、暗号化の時と同回数にし、最後に取得した終端データをfinal関数で取得したものと合わせてたBufferが、復号されたデータになります。復号化を利用する側の一例を示すと以下のようになります。暗号化には先程説明したencryptメソッドを使った場合です。iv);復号化の処理は、見ての通り、暗号化した際の手順の逆工程を正しく反映させなければならないため、暗号化と復号化のロジックの実装は表裏一体となります。Buffer('HOGE!');というものですが、セキュリティホールとなることが指摘されて、現在のNodejsでは非推奨扱いとなっています。この場合、代替として追加されたAPIがBuffer.fromと、Buffer.alloc/Buffer.allocUnsafeを使うことになります。Buffer(string)//👇Buffer.from(string)【効果的学習法レポート】nodejsをこれから学びたい人のためのオススメ書籍&教材特集まとめ今回は、Nodejsで認証機能を自作するためのCryptoの基本的な使い方をザッとダイジェストで説明していきました。暗号化独特のパラメーターや考え方を抑えておくことで、既存のオンライン認証サービスの理解も進むため、実際に自分の指を動かしながら暗号化の技術を学習されるのも良いのでと思います。記事の担当:taconocatナンデモ系エンジニア主にAngularでフロントエンド開発することが多いです。開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。プログラミングするのが好きな人間です。