在Python/API中加密数据并在BigQuery中解密的方法

2024-04-29 05:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一条管道

  • 从API摄取敏感数据
  • 根据特定条件取消识别/加密特定字段
  • 将数据后期加密(换行符分隔的JSON格式)上载到BigQuery表中

除上述内容外,我还需要能够重新识别/解密BigQuery中的数据(例如UDF,AEAD functions

现在的问题是,我无法弄清楚如何在Python中以可以在BigQuery中重新识别/解密的方式对这些数据进行加密

到目前为止,我已经看到了许多使用Dataflow/DLP/Cloud KMS或Python库(例如Fernet)对数据进行管道加密的示例。这些示例还显示了管道如何解密数据。然而,它们没有提供直接在BQ中解密数据的方法

我还了解了如何使用BQ AEAD函数加密/解密数据。我还没有弄明白如何用Python加密数据,以便在BQ中解密

我曾考虑过用BQ而不是Aflow/Python通过staging表进行加密,但由于需要加密的嵌套字段太多,所以加密过程很复杂

在Python/Airflow中,加密部分更容易实现。在BigQuery中解密步骤很简单

如何在Python中使用可以在BigQuery中解密的加密方法?


Tags: 数据方法apijson示例内容管道格式
1条回答
网友
1楼 · 发布于 2024-04-29 05:22:53

我和你有同样的问题,多亏了this issue,我取得了一些进展

要在Python中加密,请运行以下代码:

import io
import base64
import json

import tink
from tink import aead, cleartext_keyset_handle
# sourced from https://github.com/google/tink/issues/373

aead.register()

# Create key
keyset_handle = tink.new_keyset_handle(aead.aead_key_templates.AES256_GCM)
aead_primitive = keyset_handle.primitive(aead.Aead)

# encrypt your text
plaintext = b'hello'
associated_data = b'context'
ciphertext = aead_primitive.encrypt(plaintext, associated_data)
print(ciphertext)

# print the key
out = io.BytesIO()
writer = tink.BinaryKeysetWriter(out)
cleartext_keyset_handle.write(writer, keyset_handle)
out.seek(0)
print(base64.b64encode(out.read()))

输出为:

b'\x01T0\xedK\x06\xb9;.j\xec^f\xd3\x01\xf4)\xeb\n\x86\r>E\xd5\x95\xc3\x8f.\x8c\x8bL(O"\xdc0]!'
b'CMvaw6EFEmQKWAowdHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUuY3J5cHRvLnRpbmsuQWVzR2NtS2V5EiIaICn4WTH+lR6jWA5kV7k3WEAaPXUg1B0y6KKGBPCWD8RuGAEQARjL2sOhBSAB'

现在在BigQuery中,您可以使用AEAD.decrypt_字符串和FROM_BASE64()函数进行解密,如下所示(为了简单起见,我粘贴了用Python获得的密钥、密文和其他数据):

select AEAD.DECRYPT_STRING(
    FROM_BASE64('CMvaw6EFEmQKWAowdHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUuY3J5cHRvLnRpbmsuQWVzR2NtS2V5EiIaICn4WTH+lR6jWA5kV7k3WEAaPXUg1B0y6KKGBPCWD8RuGAEQARjL2sOhBSAB'),
      b'\x01T0\xedK\x06\xb9;.j\xec^f\xd3\x01\xf4)\xeb\n\x86\r>E\xd5\x95\xc3\x8f.\x8c\x8bL(O"\xdc0]!',
      'context' 
    )

结果是解密的文本:

enter image description here

相关问题 更多 >