Nest.js のハッシュと暗号化の例の詳細な説明

Nest.js のハッシュと暗号化の例の詳細な説明

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 データベースのマスター スレーブ分離のサンプル コード

>>:  Nginx 運用保守ドメイン名検証方法例

推薦する

LeetCode の SQL 実装 (177. 給与が N 番目に高い)

[LeetCode] 177. 最も高い給与従業員テーブルからn番目に高い給与を取得する SQL ...

JS の配列トラバーサルについて、一般的なループをいくつ知っていますか?

序文基本的なデータ構造として、配列とオブジェクトはさまざまなプログラミング言語で重要な役割を果たしま...

キャンバスでPS消しゴムスクラッチカードの効果を実現するためのJSの使用方法の詳細な説明

目次効果のデモンストレーション:メインJSコード実装 <div class="box...

VMware、nmap、burpsuite インストール チュートリアル

目次VMware バープスイート1. 仮想マシンイメージとVMwareのインストールと使用2. 仮想...

Docker の win ping 失敗コンテナ回避ガイド

win docker-desktopを使ってコンテナ開発に接続し、ネットワーク上で色々試してみたいと...

JavaScript+html はフロントエンドページでランダム QR コード検証を実装します

クールなフロントエンドページのランダムQRコード検証を参考までに共有します。具体的な内容は次のとおり...

Vue の高度なコンポーネント機能コンポーネントの使用シナリオとソースコード分析

目次導入使用シナリオソースコード分析要約する導入Vue は、コンポーネントをステートレスかつインスタ...

JS+AJAX は、州、市、地区のドロップダウン リストのリンクを実現します。

この記事では、州、市、地区のドロップダウンリストのリンクを実現するためのJS + AJAXの具体的な...

Vueプロジェクトをパッケージ化してリリースする手順

目次1. 開発環境から本番環境への移行2. 統一されたリクエストパスを設定する3. パッケージ化コマ...

CentOS のデフォルトの SSH ポート番号を変更する方法の例

LinuxサーバーのデフォルトのSSHポート番号は通常22なので、ほとんどのユーザーはセキュリティ上...

Win10 での MySQL 8.0.15 のインストールと設定のグラフィック チュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

HTML のセルパディングとセルスペース属性を図で説明します

セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...

WiFi 開発 | WiFi ワイヤレス テクノロジーの紹介

目次WiFiワイヤレステクノロジーの紹介1. WiFiテクノロジーの概要2. ESP8266の紹介W...

Nginx で CDN サーバーを構築する方法の詳細な説明 (画像とテキスト)

Nginxのproxy_cacheを使用してキャッシュサーバーを構築する1: ngx_cache_...

MySQL Undo ログと Redo ログの概要

目次元に戻すログUNDOログの生成と破棄UNDOログの保存元に戻すログ機能トランザクションの原子性の...