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
执行加密的方法有很多种。一种方法是您可以使用密钥对 NAME
和 Salary
列中的数据进行哈希处理。
散列算法有很多种,包括但不限于md5
、sha1
、sha256
。 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 已安装。
我必须加密然后加入 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
执行加密的方法有很多种。一种方法是您可以使用密钥对 NAME
和 Salary
列中的数据进行哈希处理。
散列算法有很多种,包括但不限于md5
、sha1
、sha256
。 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 已安装。