Поделиться через


try_aes_decrypt

Это специальная версия aes_decrypt , которая выполняет ту же операцию, но возвращает значение NULL, а не вызывает ошибку, если расшифровка не может быть выполнена. Возвращает расшифрованное значение input использования AES в modepadding. Поддерживаются длины ключей 16, 24 и 32 бита. Поддерживаемые сочетания (, padding) — (ECBmode, PKCS), (GCM, NONE) и (CBC, PKCS). Необязательные дополнительные данные, прошедшие проверку подлинности (AAD), поддерживаются только для GCM. При условии шифрования для расшифровки необходимо указать идентичное значение AAD. Режим по умолчанию — GCM.

Синтаксис

from pyspark.sql import functions as sf

sf.try_aes_decrypt(input, key, mode=None, padding=None, aad=None)

Параметры

Параметр Тип Description
input pyspark.sql.Column или str Двоичное значение для расшифровки.
key pyspark.sql.Column или str Парольная фраза, используемая для расшифровки данных.
mode pyspark.sql.Column или str, необязательный Указывает, какой режим блочного шифра следует использовать для расшифровки сообщений. Допустимые режимы: ECB, GCM, CBC.
padding pyspark.sql.Column или str, необязательный Указывает, как заполнять сообщения, длина которых не является кратной размером блока. Допустимые значения: PKCS, NONE, DEFAULT. Заполнение ПО УМОЛЧАНИю означает PKCS для ECB, NONE для GCM и PKCS для CBC.
aad pyspark.sql.Column или str, необязательный Необязательные дополнительные данные, прошедшие проверку подлинности. Поддерживается только для режима GCM. Это может быть любой вход в свободной форме и должен быть предоставлен как для шифрования, так и для расшифровки.

Возвраты

pyspark.sql.Column: новый столбец, содержащий расшифрованное значение или значение NULL.

Примеры

Пример 1. Расшифровка данных с ключом, режимом, заполнением и aad

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "AAAAAAAAAAAAAAAAQiYi+sTLm7KD9UcZ2nlRdYDe/PX4",
    "abcdefghijklmnop12345678ABCDEFGH", "GCM", "DEFAULT",
    "This is an AAD mixed into the input",)],
    ["input", "key", "mode", "padding", "aad"]
)
df.select(sf.try_aes_decrypt(
    sf.unbase64(df.input), df.key, "mode", df.padding, df.aad
).cast("STRING")).show(truncate=False)
+-------------------------------------------------------------------------+
|CAST(try_aes_decrypt(unbase64(input), key, mode, padding, aad) AS STRING)|
+-------------------------------------------------------------------------+
|Spark                                                                    |
+-------------------------------------------------------------------------+

Пример 2. Не удалось расшифровать данные с ключом, режимом, заполнением и aad

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "AAAAAAAAAAAAAAAAQiYi+sTLm7KD9UcZ2nlRdYDe/PX4",
    "abcdefghijklmnop12345678ABCDEFGH", "CBC", "DEFAULT",
    "This is an AAD mixed into the input",)],
    ["input", "key", "mode", "padding", "aad"]
)
df.select(sf.try_aes_decrypt(
    sf.unbase64(df.input), df.key, "mode", df.padding, df.aad
).cast("STRING")).show(truncate=False)
+-------------------------------------------------------------------------+
|CAST(try_aes_decrypt(unbase64(input), key, mode, padding, aad) AS STRING)|
+-------------------------------------------------------------------------+
|NULL                                                                     |
+-------------------------------------------------------------------------+

Пример 3. Расшифровка данных с ключом, режимом и заполнением

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "AAAAAAAAAAAAAAAAAAAAAPSd4mWyMZ5mhvjiAPQJnfg=",
    "abcdefghijklmnop12345678ABCDEFGH", "CBC", "DEFAULT",)],
    ["input", "key", "mode", "padding"]
)
df.select(sf.try_aes_decrypt(
    sf.unbase64(df.input), df.key, "mode", df.padding
).cast("STRING")).show(truncate=False)
+----------------------------------------------------------------------+
|CAST(try_aes_decrypt(unbase64(input), key, mode, padding, ) AS STRING)|
+----------------------------------------------------------------------+
|Spark                                                                 |
+----------------------------------------------------------------------+

Пример 4. Расшифровка данных с помощью ключа и режима

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "AAAAAAAAAAAAAAAAAAAAAPSd4mWyMZ5mhvjiAPQJnfg=",
    "abcdefghijklmnop12345678ABCDEFGH", "CBC", "DEFAULT",)],
    ["input", "key", "mode", "padding"]
)
df.select(sf.try_aes_decrypt(
    sf.unbase64(df.input), df.key, "mode"
).cast("STRING")).show(truncate=False)
+----------------------------------------------------------------------+
|CAST(try_aes_decrypt(unbase64(input), key, mode, DEFAULT, ) AS STRING)|
+----------------------------------------------------------------------+
|Spark                                                                 |
+----------------------------------------------------------------------+

Пример 5. Расшифровка данных с помощью ключа

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94",
    "0000111122223333",)],
    ["input", "key"]
)
df.select(sf.try_aes_decrypt(
    sf.unhex(df.input), df.key
).cast("STRING")).show(truncate=False)
+------------------------------------------------------------------+
|CAST(try_aes_decrypt(unhex(input), key, GCM, DEFAULT, ) AS STRING)|
+------------------------------------------------------------------+
|Spark                                                             |
+------------------------------------------------------------------+