📙
iLogtail用户手册
1.8.4
1.8.4
  • 关于
    • 什么是iLogtail
    • 发展历史
    • 产品优势
    • 开源协议
    • 社区版和企业版的对比说明
  • 安装
    • 快速开始
    • Docker使用
    • Kubernetes使用
    • 守护进程
    • 发布记录
    • 支持的操作系统
    • 源代码
      • 下载
      • 编译
      • Docker镜像
      • 编译依赖
    • 镜像站
  • 概念
    • 关键概念
    • 数据流水线
  • 配置
    • 采集配置
    • 系统参数
    • 日志
  • 数据流水线
    • 概览
    • 插件版本管理
    • 输入
      • 文本日志
      • 脚本执行数据
      • 容器标准输出
      • 文本日志(debug)
      • MetricInput示例插件
      • 主机Meta数据
      • Mock数据-Metric
      • eBPF网络调用数据
      • 主机监控数据
      • MySQL Binlog
      • GO Profile
      • GPU数据
      • HTTP数据
      • ServiceInput示例插件
      • Journal数据
      • Kafka
      • Mock数据-Service
      • SqlServer 查询数据
      • OTLP数据
      • PostgreSQL 查询数据
      • Syslog数据
    • 处理
      • 添加字段
      • 添加云资产信息
      • 原始数据
      • 数据脱敏
      • 丢弃字段
      • 字段加密
      • 条件字段处理
      • 日志过滤
      • Go时间格式解析
      • Grok
      • Json
      • 日志转SLS Metric
      • 正则
      • 重命名字段
      • 分隔符
      • 键值对
      • 多行切分
      • 字符串替换
    • 聚合
      • 基础
      • 上下文
      • 按Key分组
      • 按GroupMetadata分组
    • 输出
      • Kafka(Deprecated)
      • kafkaV2
      • ClickHouse
      • ElasticSearch
      • SLS
      • 标准输出/文件
      • OTLP日志
      • Pulsar
      • HTTP
      • Loki
    • 加速
      • 分隔符加速
      • Json加速
      • 正则加速
  • 工作原理
    • 文件发现
    • 插件系统
  • 可观测性
    • 日志
  • 开发者指南
    • 开发环境
    • 日志协议
      • 协议转换
      • 增加新的日志协议
      • 协议
        • sls协议
        • 单条协议
    • 代码风格
    • 数据模型
    • 插件开发
      • 开源插件开发引导
      • Checkpoint接口
      • Logger接口
      • 如何开发Input插件
      • 如何开发Processor插件
      • 如何开发Aggregator插件
      • 如何开发Flusher插件
      • 如何生成插件文档
      • 插件文档规范
      • 纯插件模式启动
    • 测试
      • 单元测试
      • E2E测试
    • 代码检查
      • 检查代码规范
      • 检查文件许可证
      • 检查依赖包许可证
  • 贡献指南
    • 贡献指南
    • 开发者
    • 成就
  • 性能测试
    • 容器场景iLogtail与Filebeat性能对比测试
  • 管控工具
    • 使用介绍
    • 通信协议
    • 开发指南
  • Awesome iLogtail
    • 走近iLogtail社区版
    • iLogtail社区版使用入门
    • iLogtail社区版开发者指南
    • iLogtail社区版使用案例
Powered by GitBook
On this page
  • 简介
  • 版本
  • 参数说明
  • 样例
  • 示例 1:直接指定 Key 且使用默认 IV
  • 示例 2:直接指定 Key 和 IV
  • 示例 3:通过文件指定 Key
  1. 数据流水线
  2. 处理

字段加密

Previous丢弃字段Next条件字段处理

Last updated 1 year ago

简介

processor_encrypt插件可以使用 AES-128、AES-192、AES-256 算法对指定的字段加密,采用 PKCS7 填充算法。由于密文可能包含不可见字符,插件会对其进行十六进制编码。

版本

参数说明

参数
类型,默认值
说明

Type

String,无默认值(必填)

插件类型,固定为processor_encrypt

SourceKeys

String[],无默认值(必填)

指定需要加密的字段名,支持指定多个。

EncryptionParameters

EncryptionParameter,无默认值(必填)

指定加密参数。

KeepSourceValueIfError

Boolean,false

如果发生加密失败,是否保留原始值,如果不保留的话,字段值会被替换为 ENCRYPT_ERROR。为了保护您的数据安全,默认值为 false,即失败时进行替换。

  • EncryptionParameter 类型说明

参数
类型,默认值
说明

Key

String,无默认值

指定密钥(十六进制),未配置 KeyFilePath 时必选。AES-128、AES-192、AES-256 分别要求密钥为 16、24、32 字节,所以直接以此参数指定密钥时,需要填入 32、48、64 个十六进制字符。

IV

String,默认全0

指定加密的初始向量(十六进制),若配置了KeyFilePath可不填写。此参数值大小等于内部 block 大小,AES-128、AES-192、AES-256 下分别为 8、12、16 字节,所以需要填入 16、24、32 个十六进制字符。

KeyFilePath

String,无默认值

指定保存加密参数的文件路径,未配置 Key 时必选。支持将前述参数(Key、IV)保存至文件(JSON 格式),文件中指定的值会覆盖通过前述参数指定的值。

样例

示例 1:直接指定 Key 且使用默认 IV

对字段 important 进行加密,假设密钥(Key)为二进制全 0 组成(256 bits)、不设置初始向量(IV),使用插件默认值,则配置详情及处理结果如下:

  • 采集配置

processors:
  - Type: processor_encrypt
    SourceKeys:
      - "important"
    EncryptionParameters: 
      Key: "0000000000000000000000000000000000000000000000000000000000000000"
  • 输入

"normal_key": "1",
"another_normal_key": "2",
"important": "0123456"
  • 输出(由于加密后内容包含不可见字符,加密后会将其转换为十六进制)

"normal_key": "1",
"another_normal_key": "2",
"important": "bc3acdbd40c283d91f7dc7010fd7d2b1"
  • 利用 openssl 进行解密

$ printf "%b" '\xbc\x3a\xcd\xbd\x40\xc2\x83\xd9\x1f\x7d\xc7\x01\x0f\xd7\xd2\xb1' > ciphertext
$ openssl enc -d -aes-256-cbc -iv 00000000000000000000000000000000 \
    -K 0000000000000000000000000000000000000000000000000000000000000000 \
    -in ciphertext -out plaintext
$ cat plaintext
0123456

示例 2:直接指定 Key 和 IV

对字段 important 进行加密,假设密钥(Key)为二进制全 0 组成(256 bits)、初始向量(IV)为二进制全 1 组成(128 bits),则配置详情及处理结果如下:

  • 输入

"normal_key": "1",
"another_normal_key": "2",
"important": "0123456"
  • 配置详情(注意 Key/IV 都是十六进制表示)

processors:
  - Type: processor_encrypt
    SourceKeys:
      - "important"
    EncryptionParameters: 
      Key: "0000000000000000000000000000000000000000000000000000000000000000"
      IV: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  • 输出(由于加密后内容包含不可见字符,加密后会将其转换为十六进制)

"normal_key": "1",
"another_normal_key": "2",
"important": "af6428af62d698be617b82cffd9e109b"
  • 利用 openssl 进行解密

$ printf "%b" '\xaf\x64\x28\xaf\x62\xd6\x98\xbe\x61\x7b\x82\xcf\xfd\x9e\x10\x9b' > ciphertext
$ openssl enc -d -aes-256-cbc -iv FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF \
    -K 0000000000000000000000000000000000000000000000000000000000000000 \
    -in ciphertext -out plaintext
$ cat plaintext
0123456

示例 3:通过文件指定 Key

对字段 important 进行加密,假设密钥(Key)为二进制全 1 组成(256 bits),密钥保存在机器的本地文件 /home/admin/aes_key 中,文件内容中未指定 IV 参数,使用插件默认值,配置详情及处理结果如下:

  • 前置条件

运行 logtail 的机器上需要创建文件 /home/admin/aes_key.json(JSON 格式),并将密钥以十六进制存放在其中,命令如下:

printf "{\"Key\": \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\"}" > /home/admin/aes_key.json
  • 输入

"normal_key": "1",
"another_normal_key": "2",
"important": "0123456"
  • 配置详情

processors:
  - Type: processor_encrypt
    SourceKeys:
      - "important"
    EncryptionParameters: 
      KeyFilePath: "/home/admin/aes_key.json"
  • 输出

"normal_key": "1",
"another_normal_key": "2",
"important": "bc3acdbd40c283d91f7dc7010fd7d2b1"
  • 利用 openssl 进行解密

$ printf "%b" '\xbc\x3a\xcd\xbd\x40\xc2\x83\xd9\x1f\x7d\xc7\x01\x0f\xd7\xd2\xb1' > ciphertext
$ openssl enc -d -aes-256-cbc -iv 00000000000000000000000000000000 \
    -K 0000000000000000000000000000000000000000000000000000000000000000 \
    -in ciphertext -out plaintext
$ cat plaintext
0123456
Stable