WEB開発における一般的な暗号化方法は何ですか

今日、私たちは情報セキュリティにますます注意を払っており、WEB開発におけるあらゆる種類の暗号化がますます重要になっています。通常、サーバーとのやり取りでは、データ送信のセキュリティを確保し、データのキャプチャや改ざんを防ぐために、httpsアプリケーションに加えて、送信されたデータの暗号化と復号化も必要です。今日、私たちは一般的な暗号化方法が何であるかを理解するようになりました。

一方向ハッシュ暗号化

一方向ハッシュ(ハッシュ)暗号化とは、任意の長さの入力文字列を固定長の出力文字列に変更し、出力文字列から入力文字列を取得することが難しい暗号化方式のことです。アイテムハッシュ暗号化。これは、ユーザーパスワード、要求パラメーター、ファイル暗号化などの機密データを暗号化するために広く使用されています。開発では、一方向ハッシュ暗号化アルゴリズムを使用してユーザーパスワードを保存します。

一般的な一方向ハッシュ暗号化アルゴリズムは次のとおりです。

  • MD5
  • SHA
  • マック
  • CRC

一方向ハッシュ暗号化アルゴリズムの利点は次のとおりです(例としてMD5を取り上げます)。

  • 便利なストレージ:暗号化後、それらはすべて固定サイズ(32ビット)の文字列になり、ストレージ用に固定サイズのスペースを割り当てることができます。
  • 低損失:暗号化/暗号化によるパフォーマンスの低下は最小限です。
  • ファイルの暗号化:巨大なファイルの整合性を検証するために必要なのは32ビットの文字列のみです。
  • 不可逆的:ほとんどの場合不可逆的で、安全性は良好です。

一方向ハッシュ暗号化の欠点は、ブルートフォースクラッキングの可能性があることです。ソルトを追加してセキュリティを強化するのが最善です。さらに、ハッシュの競合が発生する可能性があります。MD5暗号化も解読される可能性があることは誰もが知っています。

PHPerの場合、md5()単純な暗号化はお勧めしません。代わりに、password_hash()データに暗号化されたストレージを使用することをお勧めします。この関数は、十分に強力な一方向ハッシュアルゴリズムを使用してパスワードのハッシュを作成し、暗号化されたデータの安全性と信頼性を高めます。暗号化されたストレージとユーザーパスワードの検証のサポートは非​​常に優れています。

サンプルコード:

//密码加密
$password = '123456';
$passwordHash = password_hash(
    $password,
    PASSWORD_DEFAULT,
    ['cost' => 12]
);

//密码验证
if (password_verify($password, $passwordHash)) {
    //Success
} else {
    //Fail
}

対称暗号化

同じキーをデータの暗号化と復号化に同時に使用できます。この方法は対称暗号化と呼ばれます。これは、比較的大量のデータまたはキーデータが暗号化されるシナリオに適用されます。私たちの開発では、インターフェイスパラメータの署名検証サービスに対称暗号化アルゴリズムを使用することがよくあります。

一般的な対称暗号化アルゴリズムは次のとおりです。

  • AES

AESはDESのアップグレードバージョンであり、キーの長さが長く、オプションが多く、柔軟性が高く、セキュリティが高く、速度が速くなっています。

対称暗号化の利点は、アルゴリズムがオープンであり、計算量が少なく、暗号化速度が速く、暗号化効率が高いことです。

不利な点は、送信者と受信者がキーについて合意する必要があり、そうすると両方の当事者がキーを保存でき、キー管理が両方の当事者の負担になることです。

対称アルゴリズムのセキュリティはキーによって異なります。キーを漏らすと、誰でも送受信できるメッセージを復号化できるため、通信のセキュリティにとってキーの機密性は非常に重要です。

PHPの例

//DES加密
$key = '123kils1321dshfdsvcxpUsdaq23'; //安全密钥
$data = 'name=iphone11&order_id=201233232323123&price=3357&num=2';//加密明文
$decodeData = openssl_encrypt($data, 'DES-ECB', $key, 0);

PHP独自のopenssl_encrypt暗号化方式を使用した場合、データに対するDES暗号化の結果は次のとおりです。

oc3PdhugNue / t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8 =

暗号文を受信した後、相手は同じキーopenssl_decrypt()使用してDESで暗号文を復号化します

$key = '123kils1321dshfdsvcxpUsdaq23'; //安全密钥
$decodeData = 'oc3PdhugNue/t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8=';
$de = openssl_decrypt($decodeData, 'DES-ECB', $key, 0);
echo $de;

コードを実行し、最後に復号化された結果を取得します。

name = iphone11&order_id = 201233232323123&price = 3357&num = 2

 

DES-ECBこれは暗号化方式です。公式のphpドキュメントで他の暗号化方式を表示できます:https//www.php.net/manual/zh/function.openssl-get-cipher-methods.php

 

非対称暗号化

非対称暗号化とは、暗号化と復号化に2つの鍵が必要であることを意味します。2つの秘密鍵は公開鍵と秘密鍵です。この方法は非対称暗号化と呼ばれます。非対称暗号化は、セキュリティ要件の高いシナリオに適しており、支払いデータ、CAデジタル証明書などの少量のデータの暗号化に適しています。

一般的な非対称暗号化アルゴリズムはRSARSA2です。

非対称暗号化利点は、対称暗号化よりもセキュリティが優れていることです。暗号化と復号化には異なる鍵が必要です。公開鍵と秘密鍵の両方を相互に暗号化および復号化できます。

欠点は、暗号化と復号化に時間がかかり、速度が遅く、少量のデータの暗号化にのみ適していることです。

非対称暗号化アルゴリズムRSA2は、RSAよりも強力なセキュリティ機能を備えています。AntFinancialとSinaWeiboはRSA2アルゴリズムを使用しています。

公開鍵と秘密鍵を作成します。

openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem

上記のコマンドを実行するprivate_key.pemと、public_key.pem 2つのファイルが生成されます。

特定のサンプルコードについてはフォローアップ記事で説明しますので、ご期待ください。

 

フロントエンド暗号化

フロントエンドの友人は、フロントエンドのjs暗号化に注意を払う可能性があります。Webログイン機能を実行するとき、通常、フォーム送信またはAjaxによる検証のためにサーバーに送信します。パケットのキャプチャを防ぐには、最初にログインパスワードを暗号化(RSA)してから、検証のためにサーバーに送信する必要があります。淘宝網、JD、シーナなど、一部の大企業がこれを使用しています。

次のようなフロントエンド暗号化用の既製のjsライブラリも多数あります。

JS-RSA:OpenSSL RSA暗号化、復号化、およびキー生成を実行するために使用されるJavascriptライブラリ、https://github.com/travist/jsencrypt

MD5:一方向ハッシュ暗号化md5 jsライブラリ、https://github.com/blueimp/JavaScript-MD5

crypto-js:対称暗号化AES jsライブラリ、https://github.com/brix/crypto-js

 

この記事はhelloweba.netから来ています

リンク:https//www.helloweba.net/news/629.html

おすすめ

転載: blog.csdn.net/z3287852/article/details/113421274