gpt4 book ai didi

python - 在Python/Airflow中加密数据并在BigQuery中解密的方法

转载 作者:行者123 更新时间:2023-12-04 13:27:29 25 4
gpt4 key购买 nike

我需要一个管道

  • 从 API 中提取敏感数据
  • 基于特定条件去识别/加密特定字段
  • 上传数据后加密(换行符分隔的 JSON 格式)到 BigQuery 表

  • 除了上述内容,我还需要能够在 BigQuery 中重新识别/解密数据(例如 UDF、 AEAD functions )。
    现在的问题是我无法弄清楚如何在 Python 中以一种可以在 BigQuery 中重新识别/解密的方式加密这些数据。
    到目前为止,我已经看到许多使用 Dataflow/DLP/Cloud KMS 或 Python 库(例如 Fernet)加密数据的管道示例。这些相同的示例还展示了管道如何解密数据。但是,它们没有提供直接在 BQ 中解密数据的方法。
    我还看到了如何使用 BQ AEAD 函数加密/解密数据。我还没有想出如何在 Python 中加密数据,以便它可以在 BQ 中解密。
    我曾考虑过通过临时表在 BQ 中而不是 Airflow/Python 中进行加密过程,但由于必须加密的嵌套字段数量,这很复杂。
    加密部分在 Python/Airflow 中更容易完成。 BigQuery 中的解密步骤很简单。
    如何在 Python 中使用可在 BigQuery 中解密的加密方法?

    最佳答案

    我和你有同样的问题,并且在 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_STRING 和 FROM_BASE64() 函数进行解密,如下所示(为简单起见,我粘贴了在 Python 中获得的 key 、密文和其他数据):
    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

    关于python - 在Python/Airflow中加密数据并在BigQuery中解密的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67322013/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com