use*_*921 5 postgresql encryption
作为数据库点人员,我需要对表中任何位置的 SSN 号码进行加密。我们使用 PostgreSQL。我的应用程序同行要求我们使用 AES-256-GCM 加密算法。但是,我不太确定如何在 postgresql 中应用它。
经过谷歌搜索后,我可以使用这两种 AES 方法之一进行加密:
1.
UPDATE ssnTable
SET encrypted_ssn = encrypt(encrypted_ssn::bytea, 'mykey', 'aes')`
Run Code Online (Sandbox Code Playgroud)
2.
UPDATE ssnTable
SET encrypted_ssn = pgp_sym_encrypt(encrypted_ssn, 'mykey', 'compress-algo=1, cipher-algo=aes256')
Run Code Online (Sandbox Code Playgroud)
以上都没有专门使用“aes-256-gcm”算法,这正是我被要求使用的算法。关于如何在 PostgreSQL 的列上使用这个算法有什么想法吗?
-- Create a custom function for AES-GCM encryption using OpenSSL
CREATE OR REPLACE FUNCTION aes256_gcm_encrypt(data bytea, key text, nonce text)
RETURNS bytea AS $$
DECLARE
result bytea;
BEGIN
EXECUTE 'SELECT pg_temp.encrypt($1, ''aes-256-gcm'', ' || quote_literal(key) || '::bytea, ' || quote_literal(nonce) || '::bytea)'
INTO result
USING data;
RETURN result;
END;
$$ LANGUAGE plpgsql;
-- Usage: Encrypt a column using AES-256-GCM
UPDATE ssnTable
SET encrypted_ssn = aes256_gcm_encrypt(encrypted_ssn, 'encryption_key', 'nonce');
-- If needed, you can also create a decryption function
-- But remember to handle exceptions and security aspects properly.
Run Code Online (Sandbox Code Playgroud)