go-jose/go-jose
GitHub: go-jose/go-jose
Go 语言实现的 JOSE 标准库,提供 JWE、JWS 和 JWT 的完整支持。
Stars: 522 | Forks: 127
# Go JOSE
[](https://pkg.go.dev/github.com/go-jose/go-jose/v4)
[](https://pkg.go.dev/github.com/go-jose/go-jose/v4/jwt)
[](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 或更高版本中可用
## 示例
[](https://pkg.go.dev/github.com/go-jose/go-jose/v4)
[](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, 加密库, 开发工具, 日志审计