cyberphone/json-canonicalization

GitHub: cyberphone/json-canonicalization

该项目实现了 RFC 8785 JSON 规范化方案,通过对 JSON 数据进行确定性的序列化和属性排序,使 JSON 文档能够可靠地用于哈希、签名等密码学操作。

Stars: 144 | Forks: 31

![JCS](https://cyberphone.github.io/doc/security/jcs.svg) # JSON 规范化 诸如哈希和签名等加密操作,依赖于目标数据在序列化、传输或解析过程中不发生改变。 通过应用 JCS (JSON Canonicalization Scheme) 定义的规则, 以 JSON [[RFC8259](https://tools.ietf.org/html/rfc8259)] 格式提供的数据可以“原样”交换,同时仍可进行安全的加密操作。 JCS 实现这一点的基础是使用 ECMAScript [[ES](https://ecma-international.org/ecma-262/)] 中定义的 JSON 原语序列化格式, 将 JSON 数据限制为 I-JSON [[RFC7493](https://tools.ietf.org/html//rfc7493)] 子集, 并通过独立于平台的属性排序方案。 公开的 RFC:https://tools.ietf.org/html/rfc8785 简而言之,JSON 规范化方案的概念如下: - 使用与 ECMAScript 的 `JSON.stringify()` 兼容的方法序列化原始 JSON 数据类型 - 在*递归*过程中对 JSON `Object` 属性进行字典序排序 - JSON `Array` 数据也会进行规范化,*但元素顺序保持不变* ### 示例输入: ``` { "numbers": [333333333.33333329, 1E30, 4.50, 2e-3, 0.000000000000000000000000001], "string": "\u20ac$\u000F\u000aA'\u0042\u0022\u005c\\\"\/", "literals": [null, true, false] } ``` ### 预期输出: ``` {"literals":[null,true,false],"numbers":[333333333.3333333,1e+30,4.5,0.002,1e-27],"string":"€$\u000f\nA'B\"\\\\\"/"} ``` 注意:对于平台间可互操作的规范化,输出也必须转换为 UTF-8, 此处以十六进制表示法显示: ``` 7b 22 6c 69 74 65 72 61 6c 73 22 3a 5b 6e 75 6c 6c 2c 74 72 75 65 2c 66 61 6c 73 65 5d 2c 22 6e 75 6d 62 65 72 73 22 3a 5b 33 33 33 33 33 33 33 33 33 2e 33 33 33 33 33 33 33 2c 31 65 2b 33 30 2c 34 2e 35 2c 30 2e 30 30 32 2c 31 65 2d 32 37 5d 2c 22 73 74 72 69 6e 67 22 3a 22 e2 82 ac 24 5c 75 30 30 30 66 5c 6e 41 27 42 5c 22 5c 5c 5c 5c 5c 22 2f 22 7d ``` ### 实现 |语言|URL| |--------|---| |Rust|https://crates.io/crates/serde_json_canonicalizer| |JavaScript|https://www.npmjs.com/package/canonicalize| |Java|https://github.com/erdtman/java-json-canonicalization| |Go|https://github.com/cyberphone/json-canonicalization/tree/master/go| |.NET/C#|https://github.com/cyberphone/json-canonicalization/tree/master/dotnet| |Python|https://github.com/cyberphone/json-canonicalization/tree/master/python3| |Elixir|https://github.com/pzingg/jcs| |Ruby|https://github.com/dryruby/json-canonicalization| |PHP|https://github.com/aywan/php-json-canonicalization| ### 结合 JCS 和 JWS (RFC7515) [JWS-JCS](https://github.com/cyberphone/jws-jcs#combining-detached-jws-with-jcs-json-canonicalization-scheme) ### 在线浏览器 JCS 测试 https://cyberphone.github.io/doc/security/browser-json-canonicalization.html ### ECMAScript 提案:JSON.canonify() [JSON.canonify()](https://github.com/cyberphone/json-canonicalization/blob/master/JSON.canonify.md) ### 其他规范化工作 https://tools.ietf.org/html/draft-staykov-hu-json-canonical-form-00 http://wiki.laptop.org/go/Canonical_JSON https://gibson042.github.io/canonicaljson-spec/ https://gist.github.com/mikesamuel/20710f94a53e440691f04bf79bc3d756
标签:JS文件枚举, 可视化界面, 域名枚举, 数据可视化, 日志审计, 逆向工具