Postgres SQL中的加密和解密

我必须先加密然后再加入2个表。两个表的公用列均为“ NAME”。 当我连续在两个表中对“名称”的工资进行加密时,我应该为“名称”获得相同的值,以便我可以基于该加密的“名称”值加入两个表。

先谢谢了!

表格: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
yx118226 回答:Postgres SQL中的加密和解密

执行加密的方法有很多。一种方法是,您可以使用秘密密钥对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','01/02/2019','200'),(pgp_sym_encrypt('B','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','10/12/1991','10'),'10/12/1992','20');

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

请注意已安装pgcrypto。

本文链接:https://www.f2er.com/3157792.html

大家都在问