Postgres 中的加密和解密 SQL

Encryption and Decryption in Postgres SQL

我必须加密然后加入 2 tables。 table 的公共列是 'NAME'。 当我在两个 table 中连续加密 'Name',薪水时,我应该为 'name' 获得相同的值,以便我可以根据加密的 [=] 加入两个 table 27=] 值。

提前致谢!!!

Table : 1

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

Table : 2

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

执行加密的方法有很多种。一种方法是您可以使用密钥对 NAMESalary 列中的数据进行哈希处理。

散列算法有很多种,包括但不限于md5sha1sha256。 Postgresql 中的 pgcrypto 模块提供了一些散列函数供你使用。

无论您使用哪种散列算法,相同的值总是被散列为相同的字符串。例如,A 的 md5 散列始终为 7fc56270e7a70fa81a5935b72eacbe29,而 B 的 md5 散列始终为 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 已安装。