跳到主要内容

aes_encrypt:AES加密

速查结论

aes_encrypt(expr, key[, mode[, padding[, iv[, aad]]]]) 是 Spark SQL 中用于对数据进行 AES 加密并返回二进制密文的加密函数。

语法

aes_encrypt(expr, key[, mode[, padding[, iv[, aad]]]])

参数说明

参数类型说明
exprBINARY/STRING要加密的二进制值或字符串。
keySTRING用于加密数据的密码短语。支持的密钥长度为 16、24 和 32 字节。
modeSTRING可选。指定加密所用的块密码模式。有效值:ECBGCMCBC。默认值为 GCM
paddingSTRING可选。指定填充方式。有效值:PKCSNONEDEFAULTDEFAULT 表示 ECB 和 CBC 模式使用 PKCS,GCM 模式使用 NONE
ivBINARY可选。初始化向量,仅 CBC 和 GCM 模式支持。CBC 模式需要 16 字节,GCM 模式需要 12 字节。不提供时将生成随机向量并附加到输出前面。
aadBINARY可选。附加认证数据(AAD),仅 GCM 模式支持。加密和解密时必须提供相同的值。

示例

> SELECT hex(aes_encrypt('Spark', '0000111122223333'));
83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94
> SELECT hex(aes_encrypt('Spark SQL', '0000111122223333', 'GCM'));
6E7CA17BBB468D3084B5744BCA729FB7B2B7BCB8E4472847D02670489D95FA97DBBA7D3210
> SELECT base64(aes_encrypt('Spark SQL', '1234567890abcdef', 'ECB', 'PKCS'));
3lmwu+Mw0H3fi5NDvcu9lg==
> SELECT base64(aes_encrypt('Apache Spark', '1234567890abcdef', 'CBC', 'DEFAULT'));
2NYmDCjgXTbbxGA3/SnJEfFC/JQ7olk2VQWReIAAFKo=
> SELECT base64(aes_encrypt('Spark', 'abcdefghijklmnop12345678ABCDEFGH', 'CBC', 'DEFAULT', unhex('00000000000000000000000000000000')));
AAAAAAAAAAAAAAAAAAAAAPSd4mWyMZ5mhvjiAPQJnfg=
> SELECT base64(aes_encrypt('Spark', 'abcdefghijklmnop12345678ABCDEFGH', 'GCM', 'DEFAULT', unhex('000000000000000000000000'), 'This is an AAD mixed into the input'));
AAAAAAAAAAAAAAAAQiYi+sTLm7KD9UcZ2nlRdYDe/PX4

常见报错与避坑指南

  • 密钥长度限制:AES 支持 16、24 或 32 字节的密钥长度。使用不支持的密钥长度将导致错误。
  • IV 字节长度:使用 CBC 模式时 IV 必须为 16 字节,GCM 模式时 IV 必须为 12 字节。提供错误长度的 IV 会导致加密失败。
  • 输出需转码aes_encrypt() 返回二进制值,通常需要配合 hex()base64() 函数将结果转为可读的字符串形式。

Since: 3.3.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看