Шифрование и дешифрование в Postgres SQL - PullRequest
0 голосов
/ 05 ноября 2019

Я должен зашифровать, а затем соединить 2 таблицы. Общий столбец для обеих таблиц - «ИМЯ». Когда я последовательно шифрую «Имя», зарплату в обеих таблицах, я получу одно и то же значение для «Имени», чтобы я мог объединить обе таблицы на основе этого зашифрованного значения «Имени».

Заранее спасибо !!!

Таблица: 1

Name|    Date     |  Salary
A   |  01/01/2019 |  100
A   |  01/02/2019 |  200
B   |  01/01/2019 |  300

Таблица: 2

Name| Date of Birth |  No of Absence
A   |  10/12/1991   |  10
B   |  10/12/1992   |  20

1 Ответ

0 голосов
/ 05 ноября 2019

Существует много способов предварительного шифрования. Одним из способов является то, что вы можете хэшировать данные в столбцах NAME и Salary с помощью секретного ключа.

Существует множество алгоритмов хеширования, включая, но не ограничиваясь md5, sha1, sha256. Модуль pgcrypto в Postgresql предоставляет некоторые функции хеширования для использования.

Независимо от того, какой алгоритм хеширования вы используете, одно и то же значение всегда хешируется в одну и ту же строку. Например, хэш md5 A всегда равен 7fc56270e7a70fa81a5935b72eacbe29, а хэш B всегда равен 9d5ed678fe57bcca610140957afab571. Таким образом, вы можете присоединяться к таблицам как обычно.

Пример:

CREATE TABLE table1 (
  "Name" VARCHAR(1),
  "Date" TIMESTAMP,
  "Salary" INTEGER
);

INSERT INTO table1
  ("Name", "Date", "Salary")
VALUES
  (pgp_sym_encrypt('A', 'key'), '01/01/2019', '100'),
  (pgp_sym_encrypt('A', 'key'), '01/02/2019', '200'),
  (pgp_sym_encrypt('B', 'key'), '01/01/2019', '300');


CREATE TABLE table2 (
  "Name" VARCHAR(1),
  "Date of Birth" TIMESTAMP,
  "No of Absence" INTEGER
);

INSERT INTO table2
  ("Name", "Date of Birth", "No of Absence")
VALUES
  (pgp_sym_encrypt('A', 'key'), '10/12/1991', '10'),
  (pgp_sym_encrypt('B', 'key'), '10/12/1992', '20');

SELECT pgp_sym_decrypt(table1."Name", 'key'), table1."Salary", table1."Date", pgp_sym_decrypt(table2."Name", 'key'), table2."Date of Birth", table2."No of Absence" 
    FROM table1 INNER JOIN table2 ON (table1."Name" = table2."Name");

Обратите внимание, что pgcrypto установлен.

...