フロントエンドの一般的な暗号化アルゴリズムについてお話ししましょう

フロントエンドの一般的な暗号化アルゴリズムについてお話ししましょう

情報セキュリティの重要性が高まるにつれ、さまざまなフロントエンド暗号化がますます重要になっています。通常、データ転送のセキュリティを確保し、サーバーとのやり取り中にデータが他人に取得されたり改ざんされたりするのを防ぐために、https の適用に加えて、転送されるデータの暗号化と復号化も必要です。

[[325411]]

現在一般的な暗号化アルゴリズムは3つのカテゴリに分けられます

  • 対称暗号化アルゴリズム: AES、…
  • 非対称暗号化アルゴリズム: RSA、…
  • ハッシュアルゴリズム: MD5、…

2. 対称暗号化アルゴリズム

対称暗号化 (秘密鍵暗号化とも呼ばれる) とは、暗号化と復号化に同じ鍵を使用する暗号化アルゴリズムを指します。安全に通信するには、送信者と受信者がキーについて合意する必要があります。対称アルゴリズムのセキュリティはキーに依存します。キーが漏洩すると、誰でも送受信したメッセージを解読できるため、キーの機密性は通信のセキュリティにとって非常に重要です。

特徴

  • 利点: オープンアルゴリズム、計算量が少ない、暗号化速度が速い、暗号化効率が高い。
  • デメリット: データを送信する前に、送信者と受信者がキーについて合意する必要があり、その後、両者がキーを保持します。一方の鍵が漏洩した場合、暗号化された情報は安全ではなくなります。
  • 使用シナリオ: ローカルデータ暗号化、https 通信、ネットワーク転送など。

エーエス

AES: Advanced Encryption Standard は、最も一般的な対称暗号化アルゴリズムです (WeChat ミニプログラムは、暗号化された送信にこの暗号化アルゴリズムを使用します)。

キー: プレーンテキストを暗号化するために使用されるパスワード。キーは受信者と送信者の間の交渉によって生成されますが、ネットワークを介して直接送信することはできません。そうしないと、キーが漏洩することになります。通常、キーは非対称暗号化アルゴリズムを使用して暗号化され、ネットワークを介して相手に送信されるか、直接対面してキーについて話し合われます。キーは絶対に漏洩してはなりません。漏洩すると、攻撃者が暗号文を復元してデータを盗む可能性があります。

プロジェクトでAES暗号化が必要な場合は、オープンソースのjsライブラリcrypto-jsを使用できます。

  1. var CryptoJS = require( 'crypto-js' );
  2. var data = { id: 1, テキスト: 'Hello World' };
  3. // 暗号化して暗号文を生成する
  4. var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret_key_123' ).toString();
  5. // 復号して平文を取得する
  6. var bytes = CryptoJS.AES.decrypt(暗号テキスト、 'secret_key_123' );
  7. var 暗号化解除されたデータ = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));

3. 非対称暗号化アルゴリズム

非対称暗号化アルゴリズムには、公開鍵 (publickey: 公開鍵と呼ばれる) と秘密鍵 (privatekey: 秘密鍵と呼ばれる) の 2 つの鍵が必要です。公開鍵と秘密鍵はペアになっています。公開鍵でデータを暗号化した場合、対応する秘密鍵でのみ復号化できます。暗号化と復号化に 2 つの異なるキーが使用されるため、このアルゴリズムは非対称暗号化アルゴリズムと呼ばれます。

特徴

  • 利点: 非対称暗号化は対称暗号化よりも安全です。
  • デメリット: 暗号化と復号化には時間がかかり、速度も遅いため、少量のデータの暗号化にしか適していません。
  • 使用シナリオ: https セッションの初期段階、CA デジタル証明書、情報暗号化、ログイン認証など。

RSAA の

RSA 暗号化アルゴリズムは、最も一般的な非対称暗号化アルゴリズムです。 RSA は、1977 年に Ron Rivest、Adi Shamir、Leonard Adleman によって提案されました。 RSA は姓の最初の文字で構成されています。

プロジェクトでRSA暗号化が必要な場合は、オープンソースのjsライブラリjsencryptを使用できます。

  1. // 公開鍵を使用して暗号化する
  2. var 公開キー = 'public_key_123' ;
  3. var encrypt = new JSEncrypt();
  4. 公開キーを暗号化します。
  5. var 暗号化 = encrypt.encrypt( 'Hello World' );
  6. // 秘密鍵を使用して復号化
  7. var privateKey = 'private_key_123' ;
  8. var 復号化 = 新しい JSEncrypt();
  9. 復号化します。秘密キーを設定します。
  10. var 暗号化されていない = decrypt.decrypt(暗号化されている);

4. ハッシュアルゴリズム

ハッシュは、一般的に「ハッシュ」と翻訳され、「ハッシュ」と直接書き起こされることもあります。ハッシュは、ハッシュ アルゴリズムを使用して、任意の長さの入力 (プレマッピング、プレイメージとも呼ばれます) を固定長の出力に変換します。出力はハッシュ値です。この変換は圧縮マッピングです。つまり、ハッシュ値のスペースは通常、入力のスペースよりもはるかに小さく、異なる入力が同じ出力にハッシュされる可能性があり、ハッシュ値から入力値を一意に特定することは不可能です。

簡単に言えば、任意の長さのメッセージを固定長のメッセージ ダイジェストに圧縮する機能です。

特徴

  • 利点: 不可逆的、計算が簡単、特徴付けられる
  • デメリット: ハッシュ衝突が発生する可能性がある
  • 使用シナリオ: ファイルまたは文字列の一貫性検証、デジタル署名、認証プロトコル

MD5

MD5 は比較的一般的なハッシュ アルゴリズムです。MD5 には 2 つの重要な特徴があります。まず、ハッシュ後のプレーンテキスト データの値は固定長です。次に、ハッシュ後のプレーンテキスト データの結果は常に変更されない必要があります。前者は、2 つのプレーンテキスト ハッシュが同じ結果を生成する可能性があることを意味し、後者は、特定のデータをハッシュすると、結果が同じになる必要があることを意味します。

例えば、ログイン時にパスワードは md5 で暗号化されてサーバーに送信されます。サーバー内のパスワードも md5 で暗号化されて保存されます。この場合、暗号化された暗号文が一貫しているかどうかを確認するだけで済みます。

プロジェクトでMD5暗号化が必要な場合は、オープンソースのjsライブラリを使用できます: JavaScript-MD5

  1. var hash = md5( 'Hello World' );
  2. // b10a8db164e0754105b7a99be72e3fe5

5. Base64エンコード

Base64 エンコーディングは単なるエンコーディング形式であり、暗号化アルゴリズムではありません。HTTP 環境でより長い識別情報を送信するために使用できます。

特徴

  • あらゆるバイナリデータはBase64でエンコードできる
  • データの暗号化後、データ量は約1/3増加します
  • エンコード後には非常に明白な特徴があり、最後に=記号があります
  • 逆デコード可能
  • Base64エンコードは読み取れません

現代のブラウザはBase64エンコードとデコードメソッドbtoa()とatob()を提供しています。

  1. var enc = window.btoa( 'Hello World' );
  2. //SGVsbG8gV29ybGQ=
  3. var str = window.atob(enc);
  4. // こんにちは世界

VI. 結論

ビジネス HTTP リクエストでは、フロントエンドで AES キーがランダムに生成され、サーバーから RSA 公開キーが取得され、AES キーが非対称暗号化され、暗号化されたキーがリクエスト ヘッダーでサーバーに渡され、本文が AES で暗号化されます。サーバーはリクエスト ヘッダー内の暗号化されたキーを受信し、それを RSA キーで復号化し、プレーンテキストの AES キーを取得して、本文を復号化できます。 md5 には文字列の一貫性を検証する機能があります。リクエストが傍受された後に本文が改ざんされるのを防ぐために、リクエストを送信するときに本文の文字列を md5 で暗号化し、リクエスト ヘッダーで送信することができます。サーバーはリクエストを受け取った後、本文を復号化し、リクエスト ヘッダーで md5 を検証して、リクエストが改ざんされていないかどうかを確認します。

<<:  COVID-19パンデミックの影響を受けて、世界のエッジAIソフトウェア市場は急速な発展を遂げている

>>:  人工知能は今日私たちに何をもたらすのでしょうか?知らないブラックテクノロジーをチェック

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

AIをうまく活用したいなら、この2つの問題を早急に解決しなければなりません!

[[441323]]早すぎるオールインデータ文化を一夜にして構築することはできないのと同様に、分析...

...

ヘルスケアにおける人工知能の課題にどう対処するか

[[384554]]人工知能は、人類がより早く、より効果的に病気と闘い、より健康的な生活を送るのに役...

...

...

...

...

OpenAIに勝る完璧な埋め込みモデルであるNomic Embedが、重み、データ、コードがすべてオープンソースで利用可能になりました。

1週間前、OpenAIはユーザーに特典を配布しました。GPT-4が怠惰になる問題を修正した後、より...

...

Redis に基づく分散ロックと Redlock アルゴリズム

[[414221]]この記事はWeChatの公開アカウント「UP Technology Contro...

GAFT: Python で実装された遺伝的アルゴリズム フレームワーク

序文最近、遺伝的アルゴリズムを使用していくつかのことを最適化する必要があります。当初は、最適化のため...

機械学習を活用して産業オペレーションにおける運用リスクを管理する

センサーデータは、産業オペレーションにおける運用の安全性と効率性を確保する上で重要な役割を果たします...

インタビュアー: 一般的なソートアルゴリズムは何ですか?違い?

[[426795]]この記事はWeChatの公開アカウント「JS Daily Question」か...

Spring Boot 3.2フレームワークはほぼ完成、VMWareは利用が大幅に増加したと主張

ティム・アンダーソン編纂者:ヤン・ジェン制作:51CTO テクノロジースタック(WeChat ID:...