Golang에서 RSA 서명(SHA256withRSA) 수행

8920 단어 Go
최근에 오픈 플랫폼 프로젝트를 하고 있는데 SDK를 작성할 때 서명 검사 기능을 사용하고 Sha256 WithRSA 서명을 사용합니다. 구체적인 절차는 개인 키로 서명을 만들고 공공 키로 서명을 하는 것입니다.
이제 개인 키 서명된 코드를 공유합니다.
package common

import (
	"crypto"
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/base64"
	"encoding/pem"
	"errors"
	"sort"
	"strings"
)

const (
	PEM_BEGIN = "-----BEGIN RSA PRIVATE KEY-----
"
PEM_END = "
-----END RSA PRIVATE KEY-----"
) func RsaSign(signContent string, privateKey string, hash crypto.Hash) string { shaNew := hash.New() shaNew.Write([]byte(signContent)) hashed := shaNew.Sum(nil) priKey, err := ParsePrivateKey(privateKey) if err != nil { panic(err) } signature, err := rsa.SignPKCS1v15(rand.Reader, priKey, hash, hashed) if err != nil { panic(err) } return base64.StdEncoding.EncodeToString(signature) } func ParsePrivateKey(privateKey string)(*rsa.PrivateKey, error) { privateKey = FormatPrivateKey(privateKey) // 2、 , block, _ := pem.Decode([]byte(privateKey)) if block == nil { return nil, errors.New(" !") } // 3、 DER , priKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { return nil, err } return priKey, nil } func FormatPrivateKey(privateKey string) string { if !strings.HasPrefix(privateKey, PEM_BEGIN) { privateKey = PEM_BEGIN + privateKey } if !strings.HasSuffix(privateKey, PEM_END) { privateKey = privateKey + PEM_END } return privateKey }

RsaSign 함수 매개변수 설명:
  • signContent: 서명 내용
  • privateKey: 개인 키 문자열, PKCS#1, 첫 번째 제거 -----BEGIN RSA PRIVATE KEY -----, 마지막 제거 ---------END RSA PRIVATE KEY -----
  • hash:hash 알고리즘

  • 사용 방법:
    sign = RsaSign(signContent, privateKey, crypto.SHA256)
    

    SHAwithRSA 서명이 필요한 경우 crypto.SHA256을 crypto로 교체합니다.SHA1

    좋은 웹페이지 즐겨찾기