13

pgcrypto addon を使用して postgres データベースの列を暗号化する方法は?

私はpostgres 9.3を使用していますが、列の1つを暗号化する必要があります.postgresはAes暗号化もサポートしていますか、それともそれを達成できますか?

4

2 に答える 2

11

はい、Postgrepgcryptoモジュールは をサポートしていAESます。例を含むすべての詳細は、ここにあります。サンプルの使用法については、次のとおりです。

-- add extension
CREATE EXTENSION pgcrypto;

-- sample DDL
CREATE TABLE test_encrypt(
  value TEXT
);
INSERT INTO test_encrypt VALUES ('testvalue');

-- encrypt value
WITH encrypted_data AS (
  SELECT crypt('PasswordToEncrypt0',gen_salt('md5')) as hashed_value
)
UPDATE test_encrypt SET value = (SELECT hashed_value FROM encrypted_data);

パスワードの検証:

SELECT (value = crypt('PasswordToEncrypt0', value)) AS match FROM test_encrypt;

戻り値:

 match 
-------
 t
(1 row)
于 2016-01-07T16:10:06.650 に答える
2

暗号化は可逆的であるため、上記は暗号化ではありません。つまり、秘密のテキストまたは値を暗号化する場合、ユーザーが提供した値がハッシュ値と一致するかどうかを検証するハッシュとは異なり、その秘密の値またはテキストが何であるかを知ることができるはずです。か否か。

pgcryptoこれは、モジュールを使用して列データを暗号化する方法です。

create extension if not exists pgcrypto; -- this will install the module if not installed 
CREATE TABLE agents (
id serial primary key,
name varchar not null
);
 
INSERT INTO agents (name) values
(pgp_sym_encrypt('Johny Smith', 'longsecretencryptionkey')),
(pgp_sym_encrypt('Bob Marley', 'longsecretencryptionkey'));

longsecretencryptionkey 

はあなたの暗号化キーです。ここで暗号化キー ジェネレーターから暗号化キーを生成し、選択したビットを選択できます。最小 256 ビットを選択することをお勧めします。

暗号化キーを安全な場所に保管し、どこかに保存することを忘れないでください。暗号化を失うと、復号化できなくなります。これを理解することは非常に重要です。

これは、それらを照会する方法です

SELECT pgp_sym_decrypt(name::bytea, 'longsecretencryptionkey') FROM users WHERE pgp_sym_decrypt(name::bytea, 'longsecretencryptionkey') ILIKE 'johny%'; -- querying for agents whose name start with johny

私を助けてくれたこのブログ記事をチェックアウトできます https://blog.andreiavram.ro/encrypt-postgresql-column/

于 2022-01-03T06:46:52.703 に答える