这是执行相同作的特殊版本 aes_decrypt ,但如果无法执行解密,则返回 NULL 值,而不是引发错误。 返回一个解密值,该值 input 使用 AES 与 modepadding. 支持 16 位、24 位和 32 位的密钥长度。 支持的 (、 ) 组合是 (modeECB、padding、PKCS、GCMNONE 和 (CBC) PKCS。 仅 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 |
+------------------------------------------------------------------+