0x0 はじめにまず、ハッシュアルゴリズムとは何でしょうか?メッセージやセッション項目など、一部のデータのハッシュ値を生成するアルゴリズム。たとえば、md5 はハッシュ アルゴリズムです。ソフトウェア開発におけるハッシュ関数またはハッシュアルゴリズムは、ハッシュ関数とも呼ばれ、あらゆる種類のデータから小さなデジタル「指紋」を作成する方法です。すべてのハッシュ関数には基本的な特性があります。つまり、2 つのハッシュ値が異なる場合 (同じ関数による)、2 つのハッシュ値への元の入力も異なります。 暗号化アルゴリズムは通常、対称暗号化アルゴリズムと非対称暗号化アルゴリズムに分けられます。対称暗号化アルゴリズムの場合、情報を受信する双方が事前にキーと暗号化および復号化アルゴリズムを知っておく必要があり、キーは同じである必要があります。その後、データを暗号化および復号化できます。非対称アルゴリズムはこれとは異なります。送信側 A と B は事前に一連のキーを生成し、次に A は公開キーを B に送信し、B は公開キーを A に送信します。A が B にメッセージを送信する場合、まず B の公開キーを使用してメッセージを暗号化し、次に B に送信する必要があります。このとき、B は自分の秘密キーを使用してメッセージを復号化します。B が A にメッセージを送信する場合も、同じ原理が適用されます。 本質的には、ハッシュ化と暗号化はどちらもオブジェクトを意味のない文字列に変換します。違いは、ハッシュ化されたオブジェクトは復元できず、一方向のプロセスであることです。たとえば、パスワードは通常ハッシュ アルゴリズムを使用して暗号化されるため、ユーザーがパスワードを忘れた場合、パスワードを変更することしかできず、元のパスワードを取得することはできません。ただし、情報の暗号化は通常の暗号化アルゴリズムであり、暗号化された情報は秘密鍵によって復号化して復元することができます。 ハッシュと暗号化 ハッシュとは、数学的アルゴリズムを使用してキー値を別のキー値に変換するプロセスです。ハッシュ関数は変換を生成するために使用され、出力内容を復元することはできません。主に、データをハッシュする必要がある場合にパスワードを保存するために使用されます。 暗号化とは、情報をエンコードし、元の情報を暗号文に変換することです。通常、クライアントがパスワードなどの機密情報をサーバーに送信するために使用されます。情報は送信前に暗号化され、サーバーで復号化されます。 0x1 ハッシュNode.js エコシステムには、Bcrypt や Argon2 など、簡単に使用できる依存関係が多数あります。今回は、ハッシュ プロセスを実装するために Bcrypt を使用します。 糸を追加するbcrypt 糸を追加 @types/bcrypt -D 次に、ハッシュされたビジネスをカプセル化します。 '@nestjs/common' から { Injectable } をインポートします。 'bcrypt' から bcrypt として * をインポートします @インジェクタブル() エクスポートクラスBcryptService { プライベート静的読み取り専用 SALT_ROUNDS: 数値 = 10 /** * パスワードを比較してチェックする * @param rawStr * @param ハッシュStr */ 非同期比較(rawStr: 文字列、hashedStr: 文字列) { bcrypt.compare(rawStr, hashedStr) を返す } /** * ハッシュを生成する * @param 生のStr * @param 塩 */ 非同期ハッシュ(rawStr: 文字列、salt?: 文字列) { bcrypt.hash(rawStr, salt || BcryptService.SALT_ROUNDS) を返します } /** * 塩を生成する */ 非同期genSalt() { bcrypt.genSalt(BcryptService.SALT_ROUNDS) を返します } } 0x2 暗号化Node.js システムには、暗号化と復号化、およびその他の関連操作に使用できる暗号化モジュールが付属しています。以下は、AES-256-CTR 暗号化を使用してデータを暗号化します。 'crypto' から { createCipheriv, randomBytes } をインポートします 'util' から { promisify } をインポートします 定数iv = ランダムバイト(16) const password = 'キーを生成するために使用するパスワード' // キーの長さはアルゴリズムによって異なります // aes256 の場合は 32 バイトです const key = (await promisify(scrypt)(password, 'salt', 32)) as Buffer const cipher = createCipheriv('aes-256-ctr', キー, iv) const textToEncrypt = 'ネスト' const 暗号化テキスト = Buffer.concat([ cipher.update(textToEncrypt)、 暗号.final() ]) 復号化する必要がある場合も非常に簡単です: 'crypto' から { createDecipheriv } をインポートします const 復号化 = createDecipheriv('aes-256-ctr', キー, iv) const 復号化されたテキスト = Buffer.concat([ decipher.update(暗号化されたテキスト)、 解読.final() ]) 0x3 参照暗号化とハッシュ Node.js 暗号 ノード 要約するNest.js のハッシュと暗号化に関するこの記事はこれで終わりです。Nest.js のハッシュと暗号化に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
<<: MySQL データベースのマスター スレーブ分離のサンプル コード
序文WeChat ミニプログラムのネイティブ UI が少し物足りないと感じることがあるので、サードパ...
コンセプト紹介: MySQL の redo ログにはトランザクションの動作が記録されることはご存じの...
ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...
私は長い間この問題に悩まされていましたが、検索してみたところ、実際にこの問題を解決した人がいることが...
LinuxにGeoIPをインストールする yum で nginx-module-geoip をインス...
目次1. 解決策2. MySQLの文字セット文字セット検証ルール次のように簡単なテーブルクエリを実行...
目次長すぎて読めないコンポーネントスタイルの分離デモテスト優先度ページの分離構成参考文献ネイティブ ...
データベース MySQL バージョン 8.0.18 DBeaver.exeをダウンロードするダウンロ...
元のテキスト: https://dev.mysql.com/doc/refman/8.0/en/gr...
実際のプロジェクトでは、複数のテーブル間に関係が存在します。 1 つのテーブル内のすべてのデータを取...
1. トランザクション特性(ACID) (1)原子性トランザクションに関係するプログラムによって実行...
縦型テーブル垂直テーブル分割とは、多数の列を持つテーブルを複数のテーブルに分割することを意味します。...
Linux に Node.js をインストールする方法は 2 つあります。1 つは簡単で、解凍して使...
1. Nexusの設定1. Dockerプロキシを作成する外部ネットワーク ウェアハウスからローカル...
目次序文1. ラベルスタイルを定義する2. GeoJSONデータのシミュレーション3. Vercto...