ホームページ  >  記事  >  バックエンド開発  >  PHP が MongoDB を使用してデータを暗号化および復号化する方法

PHP が MongoDB を使用してデータを暗号化および復号化する方法

王林
王林オリジナル
2023-07-07 11:12:251332ブラウズ

PHP が MongoDB を使用してデータの暗号化と復号化を実装する方法

Web 開発では、データの暗号化と復号化は非常に重要なセキュリティ対策です。 MongoDB は、データの暗号化と復号化のための強力な機能と柔軟性を提供する人気のあるデータベースです。この記事では、MongoDB を使用して PHP でデータを暗号化および復号化する方法と、対応するコード例を紹介します。

  1. MongoDB と PHP 拡張機能のインストール
    まず、MongoDB データベースと PHP 用 MongoDB 拡張機能をインストールする必要があります。公式 Web サイトから MongoDB データベースをダウンロードし、そのインストール ガイドに従ってください。 PHP 用の MongoDB 拡張機能をインストールするには、PECL コマンド pecl install mongodb を使用できます。インストールが完了したら、php.ini ファイルに extension=mongodb.so を追加して拡張機能を有効にする必要があります。
  2. MongoDB データベースへの接続
    PHP を使用して MongoDB データベースに接続するのは非常に簡単です。 MongoDB クラスのコンストラクターを使用して MongoDB クライアント オブジェクトを作成し、接続するデータベースを選択するだけです。以下はサンプル コードです。
<?php
$mongoClient = new MongoDBClient("mongodb://localhost:27017");
$database = $mongoClient->mydatabase;
?>
  1. 暗号化されたデータ
    MongoDB は、対称暗号化とハッシュ暗号化の 2 つの方法を提供します。以下にこれら 2 つの暗号化方式のサンプルコードを紹介します。

3.1 対称暗号化
対称暗号化は、暗号化と復号化に同じキーを使用する暗号化方式です。以下は、MongoDB 対称暗号化を使用したサンプル コードです。

<?php
$collection = $database->mycollection;

$encryptionData = [
    'name' => 'John Smith',
    'email' => 'john@example.com',
    'phone' => '1234567890'
];

$encryptionOptions = [
    'keyVaultNamespace' => 'encryption.__keyVault',
    'kmsProviders' => [
        'local' => [
            'key' => base64_encode(openssl_random_pseudo_bytes(96)),
        ],
    ],
    'algorithm' => 'AEAD_AES_256_CBC_HMAC_SHA_512-Random',
    'header' => ['keyId' => base64_encode(openssl_random_pseudo_bytes(96))],
];

$command = [
    'encrypt' => $collection->getCollectionName(),
    'bsonType' => 'object',
    'value' => $encryptionData,
    'algorithm' => 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic',
];

$encryptedData = $database->command(['encrypt' => [$command, $encryptionOptions]])->toArray()[0];

$collection->insertOne($encryptedData);
?>

3.2 ハッシュ暗号化
ハッシュ暗号化は、データを一意のハッシュ値に変換する一方向の暗号化方式です。以下は、MongoDB ハッシュを使用した暗号化のサンプル コードです。

<?php
$collection = $database->mycollection;

$encryptionData = [
    'name' => 'John Smith',
    'email' => 'john@example.com',
    'phone' => '1234567890'
];

$command = [
    'hash' => $collection->getCollectionName(),
    'value' => $encryptionData,
    'algorithm' => 'bcrypt'
];

$hashedData = $database->command($command)->toArray()[0];

$collection->insertOne($hashedData);
?>
  1. データの復号化
    暗号化されたデータの復号化も簡単です。以下は、ハッシュ暗号化されたデータの対称暗号化および復号化のサンプル コードです。

4.1 対称復号化
対称復号化には、指定されたキーが必要です。以下は対称復号化のサンプル コードです。

<?php
$collection = $database->mycollection;

$decryptionOptions = [
    'keyVaultNamespace' => 'encryption.__keyVault',
    'kmsProviders' => [
        'local' => [
            'key' => $encryptionOptions['kmsProviders']['local']['key'],
        ],
    ],
];

$command = [
    'decrypt' => $collection->getCollectionName(),
    'bsonType' => 'object',
    'value' => $encryptedData,
    'algorithm' => 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic',
];

$decryptedData = $database->command(['decrypt' => [$command, $decryptionOptions]])->toArray()[0];
?>

4.2 ハッシュ復号化
ハッシュ暗号化は一方向の暗号化方式であり、復号化はサポートされていません。ハッシュ暗号化されたデータを検証する必要がある場合は、データベースが提供する検証機能を使用できます。

<?php
$collection = $database->mycollection;

$hashedData = $collection->findOne(['_id' => $documentId]);

if (password_verify($inputPassword, $hashedData->password)) {
    // 密码验证成功,执行相应操作
} else {
    // 密码验证失败,执行相应操作
}
?>

要約すると、この記事では、MongoDB を使用してデータの暗号化と復号化を実装する方法を紹介し、対称暗号化とハッシュ暗号化のコード例を示します。これらのテクノロジーを適切に適用することで、機密データを保護し、システムのセキュリティを強化できます。この記事がお役に立てば幸いです!

以上がPHP が MongoDB を使用してデータを暗号化および復号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。