Feat: jwt token加密算法由ES256更换为HS256

This commit is contained in:
2022-04-03 13:29:47 +08:00
parent ec4c957b25
commit e1f6d3c822
8 changed files with 34 additions and 188 deletions

View File

@@ -1,84 +1,20 @@
package utils
import (
"crypto/ecdsa"
"crypto/x509"
"encoding/pem"
"errors"
"fmt"
"crypto/rand"
"encoding/hex"
"github.com/kataras/golog"
)
func DecodePublicKey(encodedKey []byte) (*ecdsa.PublicKey, error) {
block, _ := pem.Decode(encodedKey)
if block == nil || block.Type != "PUBLIC KEY" {
return nil, fmt.Errorf("marshal: could not decode PEM block type %s", block.Type)
}
pub, err := x509.ParsePKIXPublicKey(block.Bytes)
// NewKey 生成Key
func NewKey() string {
length := 48
// HS256的key其实就是个随机字符串生成器
key := make([]byte, length/2)
_, err := rand.Read(key)
if err != nil {
return nil, err
golog.Fatal(err)
}
ecdsaPub, ok := pub.(*ecdsa.PublicKey)
if !ok {
return nil, errors.New("marshal: data was not an ECDSA public key")
}
return ecdsaPub, nil
}
func EncodePublicKey(key *ecdsa.PublicKey) ([]byte, error) {
derBytes, err := x509.MarshalPKIXPublicKey(key)
if err != nil {
return nil, err
}
block := &pem.Block{
Type: "PUBLIC KEY",
Bytes: derBytes,
}
return pem.EncodeToMemory(block), nil
}
func DecodePrivateKey(encodedKey []byte) (*ecdsa.PrivateKey, error) {
var skippedTypes []string
var block *pem.Block
for {
block, encodedKey = pem.Decode(encodedKey)
if block == nil {
return nil, fmt.Errorf("failed to find EC PRIVATE KEY in PEM data after skipping types %v", skippedTypes)
}
if block.Type == "EC PRIVATE KEY" {
break
} else {
skippedTypes = append(skippedTypes, block.Type)
continue
}
}
privKey, err := x509.ParseECPrivateKey(block.Bytes)
if err != nil {
return nil, err
}
return privKey, nil
}
func EncodePrivateKey(key *ecdsa.PrivateKey) ([]byte, error) {
derKey, err := x509.MarshalECPrivateKey(key)
if err != nil {
return nil, err
}
keyBlock := &pem.Block{
Type: "EC PRIVATE KEY",
Bytes: derKey,
}
return pem.EncodeToMemory(keyBlock), nil
return hex.EncodeToString(key)
}

View File

@@ -1,32 +0,0 @@
package utils
import (
"io/ioutil"
"testing"
)
func TestDecodePrivateKey(t *testing.T) {
priKeyStr, err := ioutil.ReadFile("../../config/id_ecdsa")
if err != nil {
t.Fatal(err)
}
key, err := DecodePrivateKey(priKeyStr)
if err != nil {
t.Error(err)
}
t.Log(key)
}
func TestDecodePublicKey(t *testing.T) {
priKeyStr, err := ioutil.ReadFile("../../config/id_ecdsa.pub")
if err != nil {
t.Fatal(err)
}
key, err := DecodePublicKey(priKeyStr)
if err != nil {
t.Error(err)
}
t.Log(key)
}