如何解密 BigQuery 中的列?

S.J*_*son 0 javascript encryption google-bigquery google-cloud-platform

我在 BigQuery 中有一些加密列,我想使用 BigQuery 函数对其进行解密。

加密它们所使用的机制是 AES 256。所使用的向量以 UTF8 编码。生成的数据采用 Base64 加密。

我想要做的是使用函数解密 BigQuery 中传递给我的字段,而无需执行在其他地方解密它们然后将它们集成回 BigQuery 的额外步骤的麻烦。请注意,我在 BigQuery 中可以访问的加密列的类型为字符串。

我读到了一些可以在 BigQuery 中解密的函数,例如 AEAD.DECRYPT_BYTES 和 AEAD.DECRYPT_STRING,我想知道它们是否对我的情况有帮助。

有什么办法可以做到这一点吗?如果是这样,您能引导我完成整个过程吗?

PS:这些不是实际的键和向量值,只是一个类似的示例。

Ell*_*ard 5

以下是如何使用带有 PKCS 填充的 AES-CBC 进行解密的示例。我不清楚您的示例中是否有有效的密钥/密文,因为我无法vector使用该密钥进行解密:

SELECT
  AEAD.DECRYPT_STRING(
    KEYS.ADD_KEY_FROM_RAW_BYTES(
      b'', 'AES_CBC_PKCS', FROM_BASE64('dfrBArd8b6YZFDGTYrZtQa==')),
    FROM_BASE64('/FCM1XMvr+rHwZx'), '');
Run Code Online (Sandbox Code Playgroud)

这是一个有效的独立示例:

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;
Run Code Online (Sandbox Code Playgroud)