news 2026/10/31 2:08:50

dpa 1.0 发布:把 CyberChef 的 recipe 变成可以提交进 Git 的代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
dpa 1.0 发布:把 CyberChef 的 recipe 变成可以提交进 Git 的代码

dpa—— Data Processing & Analysis。233 个内置算子、一份 YAML、一个二进制文件,让重复的数据处理流程从“每次重新点一遍 / 重新敲一遍”变成“可以 review、可以版本化、可以重跑”的资产。(项目地址:https://github.com/dpa-org/dpa)

一、先说一个你可能经历过的场景

安全运营的同学大概都干过这件事:拿到一批可疑样本,先 base64 解一层,再 XOR 解一层,算个 sha256,把里面的域名、IP、邮箱全提出来,最后把结果贴进报告。

这件事的问题从来不是“会不会做”,而是:

  • 在 GUI 工具里做的—— 步骤留在鼠标里,下次还得从头点一遍,没法 review,没法进 Git;
  • 在命令行里做的——base64 -d | xxd | openssl | grep -oE ...,一条 200 字符的管道,三天后你自己都认不出来;
  • 在脚本里做的—— 为了三行变换写了一个 Python 文件,然后开始维护它。

dpa想解决的正是这个缝:这些工作本质上是一串有序的、有名字的操作,那它就该是一份可以提交进仓库的声明文件,而不是一段记忆或一条管道。

# flow.yaml steps: - op: dpa:hex:decode - op: dpa:sha256 - op: dpa:hex:encode
$ printf '48656C6C6F' > input.hex $ dpa run flow.yaml input.hex 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

一份 YAML,一个命令,可 review、可版本化、可重跑。这就是dpa的全部主张。

二、dpa 是什么

一句话:一个从命令行跑多步数据变换与分析工作流的工具,工作流是一个 YAML 文件。

  • 用 Rust 写成(edition 2024,要求 Rust 1.89+),单个二进制,无运行时依赖;
  • 开源协议Apache-2.0;
  • 覆盖 Windows x86_64 / arm64、Linux x86_64(glibc 与静态 musl)/ arm64、macOS universal 预编译包;
  • 1.0.0 是首个公开版本,flow 格式、算子命名、CLI 表面从此按稳定对待。

它内置了233 个算子,分 7 类:

分类里面有什么
codecBase64/32/58/62/85、hex、二/八/十进制、charcode、URL、HTML、quoted-printable、punycode、UTF-8/16、hexdump;gzip、zlib、deflate、Brotli、LZMA/XZ、bzip2
cryptoXOR、RC4、ChaCha20、AES-128/192/256(ECB/CBC/CFB/OFB/CTR/GCM)、SM4(同模式 + CMAC)、DES/3DES、Blowfish、HMAC、PBKDF2、HKDF
hashMD5、SHA-1/2/3、Keccak、SHAKE、BLAKE2、RIPEMD、Whirlpool、SM3、CRC、Adler-32、Fletcher、NT/LM、ssdeep
transformreverse、case、trim、replace、ROT13、Atbash、sort/unique/split/filter/head/tail、JSON/YAML/XML/CSV 互转、regex
analyze熵值、频率、哈希识别、文件类型识别、IoC 提取、TCP/UDP/IP/TLS/Ethernet 头解析、X.509/CSR/SSH/ASN.1、签名验签
generate时间戳、UUID v1/v3/v4/v5、随机字节、素数、HOTP、TOTP
extract日期、域名、邮箱、哈希、IP、MAC、字符串、URL

三、三个真正拉开差距的设计

1. Flows as code —— 流程是一份文件

dpa run flow.yaml input按顺序执行 flow 里的每一步。同一份 flow 可以跑在单个文件上、跑在stdin上、或者跑在整个目录上。

它还提供了两个很实在的调试开关:

dpa run flow.yaml input.bin --to-step 2 # 只跑前 N 步,看中间结果 dpa run -v flow.yaml input.bin # 每步的字节数、前 16 字节 hex 预览、耗时 dpa run flow.yaml input.bin --explain # 跑之前先打印每步的输入输出估算

2. 流式执行 + 批处理 —— 不被内存卡住,也不被慢卡住

  • 流式:分块流水线,内存里只保留一个 chunk,输入大小不受可用内存限制;
  • 批处理:目录输入自动展开(-r递归),-j N并行处理,单个文件失败不中断整批;
  • 解压有每步上限(默认 64 MiB,可--max-step-output-bytes调整或设0关闭),超了报错而不是把内存吃光。

3. 可复现输出 —— 同样输入,永远同样字节

这点在写进自动化流水线时特别关键:

  • 压缩输出固定 gzip 头的 time 和 OS 字段;
  • 时间转换统一用 UTC;
  • 并行批处理的输出按输入顺序写出(多 worker 并行,结果仍然确定性)。

而且它的正确性是被独立验证过的:核心 codec、hash、压缩、crypto 算子在 CI 里跑一套差分测试,跟 Python 标准库、PyCryptodome、OpenSSL 这些独立实现逐一比对。

四、30 秒上手

单个算子,不用写 flow 文件:

$ cat input.txt aGVsbG8= $ dpa op base64:decode input.txt hello

看看有哪些算子:

dpa list # 全部 dpa list -c codec # 按分类 dpa list -s hash # 按关键词 dpa op xor --help # 单个算子的参数

批量跑一个目录:

dpa run flow.yaml input_dir -o out_dir -r -j 4

密钥不进命令行历史:

- op: dpa:hmac args: key: "env:DPA_HMAC_KEY" # 从环境变量读,不落在 shell history / 进程列表里 algo: sha256

配合--allow-env NAME1,NAME2还能白名单限制可读变量——在共享/不可信 flow 场景下防止env:被滥用。

五、几个别人不太有的东西

国密 SM2 / SM3 / SM4 是一等公民。SM2 密钥解析、公钥提取与签名验证;SM3 哈希;SM4 支持 ECB/CBC/CFB/OFB/CTR/GCM 以及 CMAC;HMAC-SM3、PBKDF2-SM3。刚发布的 rc2 里还补上了SM4-GCM(AEAD,NIST SP 800-38D)。analyze里的 X.509 解析同样覆盖国密证书场景。做国内合规和信创相关工作的同学,这个可以直接省掉一堆胶水代码。

彻底本地、彻底显式。无网络调用、无遥测、无远程 registry。插件只从你显式指定的目录加载(dpa --plugins <dir>),扫描常规插件位置需要带警告的显式 opt-in。这一点在离线环境和敏感数据场景下是硬需求,不是加分项。

三种嵌入方式。除了 CLI:

  • WASM:dpa-wasmcrate 让同一套引擎跑在 wasm32 上;
  • Python:import dpa,dpa.run(flow_yaml, data)直接在内存里跑,提供run/run_batch/run_file/list_ops/op;
  • 插件 ABI:用共享库扩展算子。

从 CyberChef 迁移。dpa recipe convert可以读写 CyberChef 的 URL / CHEF / JSON 三种 recipe 格式。需要说清楚的是:这是互通工具,不是“CyberChef → dpa flow”的一键转换器,它不校验算子可用性、也不展开控制流算子——边界写在docs/RECIPE_CONVERT.md里,别抱错期待。

中文是一等语言。错误提示、CLI 帮助、list输出都有简体中文版:dpa --lang zh-CN list或DPA_LANG=zh dpa list。全部文档(除 changelog)也都有*.zh-CN.md对照。

六、那么,谁该试试它

  • 安全分析 / 应急响应 / CTF:解码、解密、哈希、IoC 提取,本来就是一条链,现在它是个文件;
  • 需要把处理流程写进 CI 或自动化流水线的人:确定性输出 + 单二进制 + 退出码语义清晰(成功 0、失败非 0),stdout/stderr 干净无进度条无颜色转义;
  • 数据工程师:批目录、并行、流式、不受内存限制;
  • 做密评相关工作的人:SM2/SM3/SM4 开箱可用;
  • 想把团队经验沉淀下来的人:一份 flow 就是一份可 review 的 SOP。

七、安装

# 方式一:预编译包(推荐) # 从 Releases 页下载对应平台归档,解压即用 https://github.com/dpa-org/dpa/releases # 方式二:从源码 cargo build --release # Rust 1.89+,产物 target/release/dpa cargo build --features python # 需要 Python 绑定时 # 方式三:crates.io cargo install dpa # 1.0.0 发布后可用(当前 crate 名为 0.0.0 占位)

八、写在最后

dpa做的事并不炫:把一堆你已经会的算子,放进一个能被版本控制的 YAML 里,然后用 Rust 把它们跑得足够快、足够确定、足够让人放心。

但恰恰是这类“不炫”的工具,才真正留得下来——因为决定一个流程能不能被复用的,从来不是算子够不够多,而是它能不能被写下来。

  • 仓库:GitHub - dpa-org/dpa: Data Processing & Analysis · GitHub
  • Releases:Releases · dpa-org/dpa · GitHub
  • 协议:Apache-2.0

如果它正好解决了你的问题,去点个 ⭐,或者提一个你缺的算子。


本文基于 dpa 1.0.0(1.0.0-rc2,2026-10-28)的 README 与 CHANGELOG 撰写。算子数量、参数与行为请以仓库文档为准。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 2:08:13

D47 · 法律文书理解与生成:多步推理链怎么落地

文章目录 D47 法律文书理解与生成:多步推理链怎么落地 开篇:法条是确定的,推理是不确定的 第 1 章 法律场景的技术难点地图 1.1 难点是怎么换的 1.2 三类法律任务 1.3 架构选型:规则优先,模型兜底 1.4 法律场景的四条铁律 第 2 章 法条知识库:带版本、带时效、带层级 2.…

作者头像 李华
网站建设 2026/10/31 2:08:08

大模型证伪 ETH:证书可信,意义存疑

它可能推翻了一个统治理论计算机科学领域二十七年的猜想——但没人读得懂它写了什么。 2026 年 10 月&#xff0c;OpenAI 与 Anthropic 几乎同日宣称旗下模型在指数时间假设&#xff08;ETH&#xff09;上取得结果&#xff0c;前者更一次性放出 372 个前沿问题的预印本。欢呼与…

作者头像 李华
网站建设 2026/10/31 2:07:26

百亿赛道核心单品:直流电源

从通用电子测量仪器整体市场来看&#xff0c;源载类&#xff08;电源电子负载&#xff09;2025 年全球份额预计约为 13.4 亿美元 / 103.4 亿美元 ≈ 13.0%&#xff0c;在八大通用品类中位列第三&#xff0c;仅次于射频分析和示波器。因此&#xff0c;直流电源不仅是“源载类”中…

作者头像 李华
网站建设 2026/10/31 2:05:54

DeepSeek LeetCode 456. 132 模式 Java实现

LeetCode 456. 132 模式 题目思路 判断是否存在下标 i < j < k&#xff0c;满足 nums[i] < nums[k] < nums[j]。 核心思想&#xff1a;从右往左遍历 单调栈从右往左扫描&#xff0c;把当前元素看作 “1”&#xff08;最小值&#xff09;用单调递减栈维护可能的…

作者头像 李华
网站建设 2026/10/31 2:05:18

Python+AI基础入门:小白3个月轻松掌握大模型,收藏这份超全学习路线!

文章为想转AI的程序员提供了一条清晰的3个月学习路线。首月需精通Python基础和API调用&#xff1b;次月掌握LangChain、LlamaIndex及Agent、模型微调、RAG等核心技能&#xff1b;末月通过项目实战巩固知识。作者强调此路线旨在培养能快速上手的AI工程师&#xff0c;而非研究员。…

作者头像 李华