通过


try_aes_decrypt

这是执行相同作的特殊版本 aes_decrypt ,但如果无法执行解密,则返回 NULL 值,而不是引发错误。 返回一个解密值,该值 input 使用 AES 与 modepadding. 支持 16 位、24 位和 32 位的密钥长度。 支持的 (、 ) 组合是 (modeECBpaddingPKCSGCMNONE 和 (CBCPKCS。 仅 GCM 支持可选的其他经过身份验证的数据(AAD)。 如果为加密提供,则必须提供相同的 AAD 值才能进行解密。 默认模式为 GCM。

Syntax

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。 DEFAULT 填充表示 ECB 的 PKCS、GCM 的 NONE 和 CBC 的 PKCS。
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                                                             |
+------------------------------------------------------------------+