aes_encrypt:AES加密
速查结论
aes_encrypt(expr, key[, mode[, padding[, iv[, aad]]]]) 是 Spark SQL 中用于对数据进行 AES 加密并返回二进制密文的加密函数。
语法
aes_encrypt(expr, key[, mode[, padding[, iv[, aad]]]])
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| expr | BINARY/STRING | 要加密的二进制值或字符串。 |
| key | STRING | 用于加密数据的密码短语。支持的密钥长度为 16、24 和 32 字节。 |
| mode | STRING | 可选。指定加密所用的块密码模式。有效值:ECB、GCM、CBC。默认值为 GCM。 |
| padding | STRING | 可选。指定填充方式。有效值:PKCS、NONE、DEFAULT。DEFAULT 表示 ECB 和 CBC 模式使用 PKCS,GCM 模式使用 NONE。 |
| iv | BINARY | 可选。初始化向量,仅 CBC 和 GCM 模式支持。CBC 模式需要 16 字节,GCM 模式需要 12 字节。不提供时将生成随机向量并附加到输出前面。 |
| aad | BINARY | 可选。附加认证数据(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真题
