trailofbits/rfc8785.py

GitHub: trailofbits/rfc8785.py

RFC 8785 JSON 规范化方案(JCS)的纯 Python 无依赖实现,确保 JSON 序列化结果的字节级一致性。

Stars: 12 | Forks: 4

# rfc8785.py [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/53/539b67f03efa5698f098650ffa904c29d472b033ae31dd1352369219f6fb4a56.svg)](https://github.com/trailofbits/rfc8785.py/actions/workflows/tests.yml) [![PyPI version](https://badge.fury.io/py/rfc8785.svg)](https://pypi.org/project/rfc8785) [![Packaging status](https://repology.org/badge/tiny-repos/python:rfc8785.svg)](https://repology.org/project/python:rfc8785/versions) [RFC 8785](即 JSON Canonicalization Scheme 或 JCS)的纯 Python、无依赖实现。 本实现在行为上应与 [Andrew Rundgren 的参考实现] 相当,但增加了以下限制: 1. 本实现不会透明地将非 `str` 字典键转换为字符串。用户必须显式执行此转换。 2. 不支持缩进、格式化美化等。输出始终采用最小化编码。 3. 所有 API 均生成 UTF-8 编码的 `bytes` 对象或 `bytes` I/O。 ## 安装说明 ``` python -m pip install rfc8785 ``` ## 使用说明 完整的 API 文档请见[此处]。 ``` import rfc8785 foo = { "key": "value", "another-key": 2, "a-third": [1, 2, 3, [4], (5, 6, "this works too")], "more": [None, True, False], } rfc8785.dumps(foo) ``` 生成: ``` b'{"a-third":[1,2,3,[4],[5,6,"this works too"]],"another-key":2,"key":"value","more":[null,true,false]}' ``` 如需直接序列化到 I/O 接收端,请改用 `rfc8785.dump`: ``` import rfc8785 with open("/some/file", mode="wb") as io: rfc8785.dump([1, 2, 3, 4], io) ``` 所有 API 在序列化失败时都会引发 `rfc8785.CanonicalizationError` 或其子类异常。 ## 许可协议 Apache License, Version 2.0。 如另有说明,本实现的部分内容改编自 [Andrew Rundgren 的参考实现],后者同样基于 Apache License, Version 2.0 授权。
标签:JSON, Python, RFC 8785, 开发库, 数据序列化, 无后门, 标准化, 逆向工具