如何解密 BigQuery 中的列?
How can I decrypt columns in BigQuery?
我在 BigQuery 中有一些加密列,我想使用 BigQuery 函数对其进行解密。
用于加密它们的机制是 AES 256。
使用的向量以 UTF8 编码。生成的数据以 Base64 加密。
我想做的是在 BigQuery 中使用函数解密传递给我的字段,而无需执行额外的步骤在其他地方解密它们,然后将它们集成回 BigQuery。
请注意,我在 BigQuery 中可以访问的加密列是字符串类型。
我了解到一些可以在 BigQuery 中解密的函数,例如 AEAD.DECRYPT_BYTES 和 AEAD.DECRYPT_STRING,我想知道它们是否对我的情况有帮助。
有什么办法吗?如果是这样,你能告诉我整个过程吗?
P.S: 这些不是实际的键和向量值,只是一个看起来相似的例子。
我不确定你是否可以那样做。
我认为您所指的功能是为不同的用例设计的。 Bigquery AEAD Encryption 用于为每个实体使用不同的密钥来加密不同实体的数据,但您可以通过认为唯一的实体就是您来使用它。
在您的情况下,您可以通过让加密数据的人使用这些函数和使用 KEYS.NEW_KEYSET(key_type)
创建的密钥集来重新设计解决方案。您将需要一个额外的 table 来将键集存储到 encrypt/decrypt 数据。
下面是一个示例,说明如何使用带有 PKCS 填充的 AES-CBC 进行解密。我不清楚您的示例中是否有有效的 key/ciphertext,因为我无法使用该密钥解密 vector
:
SELECT
AEAD.DECRYPT_STRING(
KEYS.ADD_KEY_FROM_RAW_BYTES(
b'', 'AES_CBC_PKCS', FROM_BASE64('dfrBArd8b6YZFDGTYrZtQa==')),
FROM_BASE64('/FCM1XMvr+rHwZx'), '');
这是一个独立的例子:
WITH EncryptedInput AS (
SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376') AS ciphertext,
b'1234567890123456' AS key UNION ALL
SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be2ea3f4c2ac2c8863306fd9ff87e10497b61d86111fafd0d0fe0046d7e199044ec'),
b'1234567890123456' UNION ALL
SELECT FROM_HEX('0102030405060708090a0b0c0d0e0f1073d8712936ea9899952e97284288c1cd7b7cbfff0a53ae87a19454f7d84082a07a25fc01031b5e08c6b7ce6520989b82'),
b'98765432101234567890123456789012' UNION ALL
SELECT NULL, b'1234567890123456' UNION ALL
SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376'),
NULL
)
SELECT AEAD.DECRYPT_STRING(KEYS.ADD_KEY_FROM_RAW_BYTES(b'', 'AES_CBC_PKCS', key), ciphertext, '') AS plaintext
FROM EncryptedInput;
我在 BigQuery 中有一些加密列,我想使用 BigQuery 函数对其进行解密。
用于加密它们的机制是 AES 256。 使用的向量以 UTF8 编码。生成的数据以 Base64 加密。
我想做的是在 BigQuery 中使用函数解密传递给我的字段,而无需执行额外的步骤在其他地方解密它们,然后将它们集成回 BigQuery。 请注意,我在 BigQuery 中可以访问的加密列是字符串类型。
我了解到一些可以在 BigQuery 中解密的函数,例如 AEAD.DECRYPT_BYTES 和 AEAD.DECRYPT_STRING,我想知道它们是否对我的情况有帮助。
有什么办法吗?如果是这样,你能告诉我整个过程吗?
P.S: 这些不是实际的键和向量值,只是一个看起来相似的例子。
我不确定你是否可以那样做。
我认为您所指的功能是为不同的用例设计的。 Bigquery AEAD Encryption 用于为每个实体使用不同的密钥来加密不同实体的数据,但您可以通过认为唯一的实体就是您来使用它。
在您的情况下,您可以通过让加密数据的人使用这些函数和使用 KEYS.NEW_KEYSET(key_type)
创建的密钥集来重新设计解决方案。您将需要一个额外的 table 来将键集存储到 encrypt/decrypt 数据。
下面是一个示例,说明如何使用带有 PKCS 填充的 AES-CBC 进行解密。我不清楚您的示例中是否有有效的 key/ciphertext,因为我无法使用该密钥解密 vector
:
SELECT
AEAD.DECRYPT_STRING(
KEYS.ADD_KEY_FROM_RAW_BYTES(
b'', 'AES_CBC_PKCS', FROM_BASE64('dfrBArd8b6YZFDGTYrZtQa==')),
FROM_BASE64('/FCM1XMvr+rHwZx'), '');
这是一个独立的例子:
WITH EncryptedInput AS (
SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376') AS ciphertext,
b'1234567890123456' AS key UNION ALL
SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be2ea3f4c2ac2c8863306fd9ff87e10497b61d86111fafd0d0fe0046d7e199044ec'),
b'1234567890123456' UNION ALL
SELECT FROM_HEX('0102030405060708090a0b0c0d0e0f1073d8712936ea9899952e97284288c1cd7b7cbfff0a53ae87a19454f7d84082a07a25fc01031b5e08c6b7ce6520989b82'),
b'98765432101234567890123456789012' UNION ALL
SELECT NULL, b'1234567890123456' UNION ALL
SELECT FROM_HEX('deed2a88e73dccaa30a9e6e296f62be27db30db16f76d3f42c85d31db3f46376'),
NULL
)
SELECT AEAD.DECRYPT_STRING(KEYS.ADD_KEY_FROM_RAW_BYTES(b'', 'AES_CBC_PKCS', key), ciphertext, '') AS plaintext
FROM EncryptedInput;