ホームページ >データベース >mysql チュートリアル >MySQL データベースのデータを暗号化および復号化するにはどうすればよいですか?

MySQL データベースのデータを暗号化および復号化するにはどうすればよいですか?

王林
王林オリジナル
2023-07-12 16:28:405799ブラウズ

MySQL データベースのデータを暗号化および復号化するにはどうすればよいですか?

インターネット技術の継続的な発展に伴い、データセキュリティの重要性がますます高まっています。 MySQL データベースでは、ユーザーのプライバシーとデータのセキュリティを保護するために機密データを暗号化する必要があることがよくあります。この記事では、MySQL データベース内のデータを暗号化および復号化する方法をコード例とともに説明します。

暗号化方法 1: AES アルゴリズムを使用した暗号化

AES (Advanced Encryption Standard) アルゴリズムは、データの暗号化と復号化に同じキーを使用する対称暗号化アルゴリズムです。 AES アルゴリズムを使用してデータを暗号化および復号化する例を次に示します。

  1. AES 暗号化関数の作成

    DELIMITER $$
    
    CREATE FUNCTION AES_ENCRYPT_STR(str TEXT, key_str TEXT) RETURNS TEXT
    BEGIN
     DECLARE encrypted_str TEXT;
     SELECT AES_ENCRYPT(str, key_str) INTO encrypted_str;
     RETURN encrypted_str;
    END$$
    
    DELIMITER ;
  2. AES 復号化関数の作成

    DELIMITER $$
    
    CREATE FUNCTION AES_DECRYPT_STR(str TEXT, key_str TEXT) RETURNS TEXT
    BEGIN
     DECLARE decrypted_str TEXT;
     SELECT AES_DECRYPT(str, key_str) INTO decrypted_str;
     RETURN decrypted_str;
    END$$
    
    DELIMITER ;
  3. AES 暗号化関数を使用してデータを暗号化します

    INSERT INTO table_name (encrypted_data) VALUES (AES_ENCRYPT_STR('原始数据', '密钥'));
  4. AES 復号関数を使用してデータを復号します

    SELECT AES_DECRYPT_STR(encrypted_data, '密钥') FROM table_name;

暗号化方法 2: SHA2 関数を使用した暗号化

SHA2 関数は、任意の長さのデータを固定長の文字列に変換できる一方向ハッシュ関数です。 SHA2機能を使用してデータを暗号化できますが、復号化することはできません。以下は、SHA2 関数を使用してデータを暗号化する例です。

  1. SHA2 暗号化関数を作成する

    DELIMITER $$
    
    CREATE FUNCTION SHA2_ENCRYPT_STR(str TEXT) RETURNS TEXT
    BEGIN
     DECLARE encrypted_str TEXT;
     SELECT SHA2(str, 256) INTO encrypted_str;
     RETURN encrypted_str;
    END$$
    
    DELIMITER ;
  2. SHA2 暗号化関数を使用して、データの暗号化

    INSERT INTO table_name (encrypted_data) VALUES (SHA2_ENCRYPT_STR('原始数据'));

暗号化方法 3: RSA アルゴリズムを使用した暗号化

RSA (Rivest-Shamir-Adleman) アルゴリズムは、公開キーを使用して暗号化する非対称暗号化アルゴリズムです。暗号化では秘密キーを使用してデータを復号化します。 RSA アルゴリズムは主に、パスワードやキーなどの小さなデータの暗号化に使用されます。以下は、RSA アルゴリズムを使用してデータの暗号化と復号化を行う例です。

  1. まず、RSA キーのペア (公開キーと秘密キー) を生成する必要があります

    CREATE TABLE rsa_keys (
     id INT AUTO_INCREMENT PRIMARY KEY,
     public_key TEXT,
     private_key TEXT
    );
  2. RSA キー ペアを生成し、データベースに保存します

    DELIMITER $$
    
    CREATE PROCEDURE generate_rsa_keys()
    BEGIN
     DECLARE public_key_text TEXT;
     DECLARE private_key_text TEXT;
     
     SET @private_key = 'temp.key';
     
     -- 生成RSA密钥对
     CALL mysql.rsa_generate_key_pair(2048);
     
     -- 保存公钥
     SELECT public_key INTO public_key_text FROM mysql.rsa_keys;
     INSERT INTO rsa_keys (public_key) VALUES (public_key_text);
     
     -- 保存私钥
     LOAD_FILE(@private_key) INTO private_key_text;
     UPDATE rsa_keys SET private_key = private_key_text WHERE id = LAST_INSERT_ID();
     
     -- 删除临时文件
     SET @delete_cmd = CONCACT('rm -f ', @private_key);
     PREPARE delete_stmt FROM @delete_cmd;
     EXECUTE delete_stmt;
     DEALLOCATE PREPARE delete_stmt;
     
     -- 显示公钥和私钥
     SELECT public_key_text AS public_key, private_key_text AS private_key;
    END$$
    
    DELIMITER ;
  3. RSA 公開キーを使用してデータを暗号化します

    SET @public_key_text = (SELECT public_key FROM rsa_keys WHERE id = 1);
    SET @data_to_encrypt = '原始数据';
    SET @encrypted_data = RSA_ENCRYPT(@data_to_encrypt, @public_key_text);
    INSERT INTO table_name (encrypted_data) VALUES (@encrypted_data);
  4. RSA 秘密キーを使用してデータを復号化する

    SET @private_key_text = (SELECT private_key FROM rsa_keys WHERE id = 1);
    SELECT RSA_DECRYPT(encrypted_data, @private_key_text) AS decrypted_data FROM table_name;

概要:

この記事では、MySQL データベース内のデータを暗号化および復号化する方法について、AES アルゴリズム、SHA2 を使用する 3 つの方法を紹介します。関数と RSA アルゴリズム。これらの方法では、データ セキュリティ要件に基づいて適切な暗号化アルゴリズムを選択できます。これらの方法を使用することで、データのセキュリティをより適切に保護し、データ プライバシー保護に対するユーザーのニーズを満たすことができます。

以上がMySQL データベースのデータを暗号化および復号化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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