我需要一条管道
除此之外,我还需要能够重新识别/解密BigQuery中的数据(例如UDF、AEAD函数)。
现在的问题是,我无法弄清楚如何以一种可以在BigQuery中重新识别/解密的方式来加密这个数据。
到目前为止,我已经看到了许多使用Dataflow/DLP/Cloud或Python库(例如Fernet)加密数据的管道示例。这些同样的例子也展示了管道如何解密数据。然而,它们并没有提供一种方法来直接解密BQ中的数据。
我还看到了如何使用BQ函数加密/解密数据。我还没有弄清楚如何用Python加密数据,以便在BQ中对其进行解密。
我已经考虑过通过暂存表来执行be加密过程,而不是Airflow/Python,但是由于需要加密的嵌套字段的数量太多,所以这个过程很复杂。
在Python/Airflow中,加密部分更容易完成。在BigQuery中,解密步骤很简单。
如何使用BigQuery中可以解密的加密方法?
发布于 2021-08-24 14:56:08
我和你有同样的问题,多亏了本期,我已经取得了一些进展。
要在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获得的数据):
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'
)结果是解密的文本:

https://stackoverflow.com/questions/67322013
复制相似问题