| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // token 测试密钥生成助手(PKCS1 / PKCS8 两种私钥形态,均配 PKIX 公钥)。
- //
- // 密钥仅内存生成(不依赖 config/dev.json,不入库);RSA 2048 足够 RS256 测试。
- package token
- import (
- "crypto/rand"
- "crypto/rsa"
- "crypto/x509"
- "encoding/pem"
- "testing"
- )
- // genKeyPair 生成 RS2048 密钥对(PKCS1 私钥 PEM + PKIX 公钥 PEM)。
- func genKeyPair(t *testing.T) (privPEM, pubPEM string) {
- t.Helper()
- key, err := rsa.GenerateKey(rand.Reader, 2048)
- if err != nil {
- t.Fatalf("生成 RSA 私钥: %v", err)
- }
- privPEM = string(pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}))
- pubPEM, err = pubPEMOf(t, key)
- if err != nil {
- t.Fatalf("序列化公钥: %v", err)
- }
- return privPEM, pubPEM
- }
- // genKeyPairPKCS8 生成 RS2048 密钥对(PKCS8 私钥 PEM + PKIX 公钥 PEM)。
- func genKeyPairPKCS8(t *testing.T) (privPEM, pubPEM string) {
- t.Helper()
- key, err := rsa.GenerateKey(rand.Reader, 2048)
- if err != nil {
- t.Fatalf("生成 RSA 私钥: %v", err)
- }
- der, err := x509.MarshalPKCS8PrivateKey(key)
- if err != nil {
- t.Fatalf("PKCS8 序列化: %v", err)
- }
- privPEM = string(pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: der}))
- pubPEM, err = pubPEMOf(t, key)
- if err != nil {
- t.Fatalf("序列化公钥: %v", err)
- }
- return privPEM, pubPEM
- }
- // pubPEMOf 由 *rsa.PrivateKey 取公钥并序列化为 PKIX PEM。
- func pubPEMOf(t *testing.T, key *rsa.PrivateKey) (string, error) {
- t.Helper()
- der, err := x509.MarshalPKIXPublicKey(&key.PublicKey)
- if err != nil {
- return "", err
- }
- return string(pem.EncodeToMemory(&pem.Block{Type: "PUBLIC KEY", Bytes: der})), nil
- }
|