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


aes_encrypt

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

Синтаксис

from pyspark.sql import functions as sf

sf.aes_encrypt(input, key, mode=None, padding=None, iv=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.
iv pyspark.sql.Column или str, необязательный Необязательный вектор инициализации. Поддерживается только для режимов CBC и GCM. Допустимые значения: Нет или "". 16-байтовый массив для режима CBC. 12-байтовый массив для режима GCM.
aad pyspark.sql.Column или str, необязательный Необязательные дополнительные данные, прошедшие проверку подлинности. Поддерживается только для режима GCM. Это может быть любой вход в свободной форме и должен быть предоставлен как для шифрования, так и для расшифровки.

Возвраты

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

Примеры

Пример 1. Шифрование данных с помощью ключа, режима, заполнения, iv и aad

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "Spark", "abcdefghijklmnop12345678ABCDEFGH", "GCM", "DEFAULT",
    "000000000000000000000000", "This is an AAD mixed into the input",)],
    ["input", "key", "mode", "padding", "iv", "aad"]
)
df.select(sf.base64(sf.aes_encrypt(
    df.input, df.key, "mode", df.padding, sf.to_binary(df.iv, sf.lit("hex")), df.aad)
)).show(truncate=False)
+-----------------------------------------------------------------------+
|base64(aes_encrypt(input, key, mode, padding, to_binary(iv, hex), aad))|
+-----------------------------------------------------------------------+
|AAAAAAAAAAAAAAAAQiYi+sTLm7KD9UcZ2nlRdYDe/PX4                           |
+-----------------------------------------------------------------------+

Пример 2. Шифрование данных с помощью ключа, режима, заполнения и iv

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "Spark", "abcdefghijklmnop12345678ABCDEFGH", "GCM", "DEFAULT",
    "000000000000000000000000", "This is an AAD mixed into the input",)],
    ["input", "key", "mode", "padding", "iv", "aad"]
)
df.select(sf.base64(sf.aes_encrypt(
    df.input, df.key, "mode", df.padding, sf.to_binary(df.iv, sf.lit("hex")))
)).show(truncate=False)
+--------------------------------------------------------------------+
|base64(aes_encrypt(input, key, mode, padding, to_binary(iv, hex), ))|
+--------------------------------------------------------------------+
|AAAAAAAAAAAAAAAAQiYi+sRNYDAOTjdSEcYBFsAWPL1f                        |
+--------------------------------------------------------------------+

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

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "Spark SQL", "1234567890abcdef", "ECB", "PKCS",)],
    ["input", "key", "mode", "padding"]
)
df.select(sf.aes_decrypt(sf.aes_encrypt(df.input, df.key, "mode", df.padding),
    df.key, df.mode, df.padding
).cast("STRING")).show(truncate=False)
+---------------------------------------------------------------------------------------------+
|CAST(aes_decrypt(aes_encrypt(input, key, mode, padding, , ), key, mode, padding, ) AS STRING)|
+---------------------------------------------------------------------------------------------+
|Spark SQL                                                                                    |
+---------------------------------------------------------------------------------------------+

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

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "Spark SQL", "0000111122223333", "ECB",)],
    ["input", "key", "mode"]
)
df.select(sf.aes_decrypt(sf.aes_encrypt(df.input, df.key, "mode"),
    df.key, df.mode
).cast("STRING")).show(truncate=False)
+---------------------------------------------------------------------------------------------+
|CAST(aes_decrypt(aes_encrypt(input, key, mode, DEFAULT, , ), key, mode, DEFAULT, ) AS STRING)|
+---------------------------------------------------------------------------------------------+
|Spark SQL                                                                                    |
+---------------------------------------------------------------------------------------------+

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

from pyspark.sql import functions as sf
df = spark.createDataFrame([(
    "Spark SQL", "abcdefghijklmnop",)],
    ["input", "key"]
)
df.select(sf.aes_decrypt(
    sf.unbase64(sf.base64(sf.aes_encrypt(df.input, df.key))), df.key
).cast("STRING")).show(truncate=False)
+-------------------------------------------------------------------------------------------------------------+
|CAST(aes_decrypt(unbase64(base64(aes_encrypt(input, key, GCM, DEFAULT, , ))), key, GCM, DEFAULT, ) AS STRING)|
+-------------------------------------------------------------------------------------------------------------+
|Spark SQL                                                                                                    |
+-------------------------------------------------------------------------------------------------------------+