BigQuery теперь поддерживает функции шифрования . Из документации приведен автономный пример, который создает некоторые наборы ключей и использует их для шифрования данных. На практике вы хотели бы сохранить наборы ключей в реальной таблице, чтобы впоследствии вы могли использовать их для расшифровки зашифрованного текста.
WITH CustomerKeysets AS (
SELECT 1 AS customer_id, KEYS.NEW_KEYSET('AEAD_AES_GCM_256') AS keyset UNION ALL
SELECT 2, KEYS.NEW_KEYSET('AEAD_AES_GCM_256') UNION ALL
SELECT 3, KEYS.NEW_KEYSET('AEAD_AES_GCM_256')
), PlaintextCustomerData AS (
SELECT 1 AS customer_id, 'elephant' AS favorite_animal UNION ALL
SELECT 2, 'walrus' UNION ALL
SELECT 3, 'leopard'
)
SELECT
pcd.customer_id,
AEAD.ENCRYPT(
(SELECT keyset
FROM CustomerKeysets AS ck
WHERE ck.customer_id = pcd.customer_id),
pcd.favorite_animal,
CAST(pcd.customer_id AS STRING)
) AS encrypted_animal
FROM PlaintextCustomerData AS pcd;
Редактировать: если вы хотите расшифровать, используя AES-CBC с заполнением PKCS (неясно, какой тип заполнения вы используете в вашем примере), вы можете использовать функцию KEYS.ADD_KEY_FROM_RAW_BYTES
для создания набора ключей затем позвоните AEAD.DECRYPT_STRING
или AEAD.DECRYPT_BYTES
. Например:
SELECT
AEAD.DECRYPT_STRING(
KEYS.ADD_KEY_FROM_RAW_BYTES(b'', 'AES_CBC_PKCS', b'1234567890123456'),
FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376'),
'')
Возвращает abcdef
. Ожидается, что IV будет первым 16 байтом зашифрованного текста.