go-jose/go-jose

GitHub: go-jose/go-jose

Go 语言实现的 JOSE 标准库,提供 JWE、JWS 和 JWT 的完整支持。

Stars: 522 | Forks: 127

# Go JOSE [![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4) [![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4/jwt.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4/jwt) [![license](https://img.shields.io/badge/license-apache_2.0-blue.svg?style=flat)](https://raw.githubusercontent.com/go-jose/go-jose/master/LICENSE) jose 包旨在提供 Javascript Object Signing 和 Encryption 标准集的实现。这包括对 JSON Web Encryption、JSON Web Signature 和 JSON Web Token 标准的支持。 ## 概述 该实现遵循 [JSON Web Encryption](https://dx.doi.org/10.17487/RFC7516) (RFC 7516)、 [JSON Web Signature](https://dx.doi.org/10.17487/RFC7515) (RFC 7515) 和 [JSON Web Token](https://dx.doi.org/10.17487/RFC7519) (RFC 7519) 规范。 支持的算法列表如下所示。该库支持 compact 和 JWS/JWE JSON Serialization 格式,并可选地支持多个接收者。它还附带了一个小型的命令行工具 ([`jose-util`](https://pkg.go.dev/github.com/go-jose/go-jose/jose-util)), 用于在 shell 中处理 JOSE 消息。 **注意**:我们使用了 Go 标准库中 `encoding/json` 包的一个分叉版本,该版本对成员名称使用区分大小写的匹配(而不是 [不区分大小写的匹配](https://www.ietf.org/mail-archive/web/json/current/msg03763.html))。 这是为了避免 go-jose 与其他语言库之间对消息解释产生差异。 ### 版本说明 即将发布的版本 5 将包含几项破坏性的 API 变更,并且将要求使用 Golang 的 `encoding/json/v2`,目前这要求使用在 GOEXPERIMENT=jsonv2 环境下构建的 Go 1.25。 版本 4 是目前的稳定版本: ``` import "github.com/go-jose/go-jose/v4" ``` 它至少支持当前和上一个 Golang 版本。目前它要求 Golang 1.24。 版本 3 仅接收关键的安全更新。建议迁移至版本 4。 版本 1 和 2 已过时,但可以在旧仓库 [square/go-jose](https://github.com/square/go-jose) 中找到。 ### 支持的算法 请参阅下表了解支持的算法。算法标识符在可能的情况下与 [JSON Web Algorithms](https://dx.doi.org/10.17487/RFC7518) 标准中的名称相匹配。Godoc 参考中提供了一系列常量。 | 密钥加密 | 算法标识符 | |:-----------------------|:-----------------------------------------------| | RSA-PKCS#1v1.5 | RSA1_5 | | RSA-OAEP | RSA-OAEP, RSA-OAEP-256 | | AES key wrap | A128KW, A192KW, A256KW | | AES-GCM key wrap | A128GCMKW, A192GCMKW, A256GCMKW | | ECDH-ES + AES key wrap | ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW | | ECDH-ES (direct) | ECDH-ES1 | | Direct encryption | dir1 | 1. 在多接收者模式下不支持 | 签名 / MAC | 算法标识符 | |:------------------|:------------------------| | RSASSA-PKCS#1v1.5 | RS256, RS384, RS512 | | RSASSA-PSS | PS256, PS384, PS512 | | HMAC | HS256, HS384, HS512 | | ECDSA | ES256, ES384, ES512 | | Ed25519 | EdDSA2 | 2. 仅在该包的版本 2 中可用 | 内容加密 | 算法标识符 | |:-------------------|:--------------------------------------------| | AES-CBC+HMAC | A128CBC-HS256, A192CBC-HS384, A256CBC-HS512 | | AES-GCM | A128GCM, A192GCM, A256GCM | | 压缩 | 算法标识符 | |:-------------------|--------------------------| | DEFLATE (RFC 1951) | DEF | ### 支持的密钥类型 请参阅下表了解支持的密钥类型。这些类型能被该库识别,并且可以传递给相应的函数,例如 `NewEncrypter` 或 `NewSigner`。如果需要,这些密钥中的每一个也可以包装在 JWK 中,从而允许附加 key id。 | 算法 | 对应的类型 | |:------------------|--------------------------------------------------------------------------------------------------------------------------------------| | RSA | *[rsa.PublicKey](https://pkg.go.dev/crypto/rsa/#PublicKey), *[rsa.PrivateKey](https://pkg.go.dev/crypto/rsa/#PrivateKey) | | ECDH, ECDSA | *[ecdsa.PublicKey](https://pkg.go.dev/crypto/ecdsa/#PublicKey), *[ecdsa.PrivateKey](https://pkg.go.dev/crypto/ecdsa/#PrivateKey) | | EdDSA1 | [ed25519.PublicKey](https://pkg.go.dev/crypto/ed25519#PublicKey), [ed25519.PrivateKey](https://pkg.go.dev/crypto/ed25519#PrivateKey) | | AES, HMAC | []byte | 1. 仅在该包的版本 2 或更高版本中可用 ## 示例 [![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4) [![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4/jwt.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4/jwt) 示例可以在该包的 Godoc 参考文档中找到。 [`jose-util`](https://github.com/go-jose/go-jose/tree/main/jose-util) 子目录中还包含一个小型的命令行工具,它也可以作为一个有用的示例。
标签:EVTX分析, Go, JOSE, JWE, JWS, JWT, Ruby工具, SOC Prime, 加密库, 开发工具, 日志审计