背景
为了保证数据的安全性,在做网络数据传输时,往往会对原始数据进行加密操作。加密算法多种多样,而AES加密则是我们最常见的加密算法,是对称加密算法,其运算速度快,安全性高且内存需求低。本期来学习一下阿里云日志服务数据加工提供的AES加密及解密教程。
AES加密
- 原始数据
{"name": "aliyun", "age": "18", "content": "content"}
现在对name字段进行加密,设置的密钥为"ieuwnsjdkjkixxpo",iv可以不填,会随机生成一个iv向量,输出的格式有bytes、base64和十六进制格式字符串。
- 加工语法
e_set("aes_name", aes_encrypt(v("name"), key="ieuwnsjdkjkixxpo", output_format="base64"))
这里我们设置输出格式为base64。
- 加工结果
aes_name:f7NmJfUrcZQsZ8MSS7g/5g== age:18 content:content name:aliyun
可以看到,aes_name字段为name字段经过aes加密后的base64格式的字符串。接下来再来学习下AES解密函数。
AES解密
aes加密与aes解密参数大致相同。aes加密默认输入为bytes格式字符串,输出十六进制字符串。而aes解密默认输入为十六进制,输出为bytes格式。看如下案例。
- 原始日志
{"name":"Alice","email":"93810392x@qq.com","phone":"1Om5HaeQHAi9f8i3Msj6fw=="}
- 加工语法
e_set("phoneNum",(aes_decrypt(v("phone"),"aoielscshgdhhhsj",iv=b"owpejskdnhtesyun",input_format="base64",)),)
- 加工结果
email:93810392x@qq.com name:Alice phone:1Om5HaeQHAi9f8i3Msj6fw== phoneNum:029-8873145*
常见问题及注意事项
- aes_decrypt默认输出为bytes格式,可以根据output_encoding参数进行解码。SLS默认会把bytes格式转换为字符串,有可能会出现信息缺失。
- 密钥key的字节长度必须为16、24或32。
- iv向量必须是bytes格式,如果不设置的话,会随机生成。