Golang-PKCS8

本文介绍了PKCS8作为私钥信息语法规范,用于存储多种类型私钥。PKCS8相对于PKCS1,支持更广泛的私钥编码。内容涵盖Golang中RSA和SM2私钥的编码和解码操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PKCS8:全名《Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Specification》,从名称可以看出它是一个专门用来存储私钥而定义的格式规范。

个人理解:PKCS1只定义了对RSA密钥的编码规范,而PKCS8则可以对范围更大的私钥进行编码!!!

本章内容只列举RSA和SM2两种类型的密钥编码。

一、公钥

1、编码

import (
    x509 "github.com/tjfoc/gmsm/x509"
)
// 支持RSA/ECDSA/SM2类型
func GeneratePubKeyMarshalPKCS8(key crypto.PublicKey) ([]byte, error) {
	return x509.MarshalPKIXPublicKey(key)
}

2、解码

func GeneratePubKeyUnMarshalPKCS8(data []byte) (crypto.PublicKey, error) {
   return x509.ParsePKIXPublicKey(data)
}

二、私钥

1、编码

import (
    nx509 "crypto/x509"
    x509  "github.com/tjfoc/gmsm/x509"
)
// 支持RSA和SM2,pwd只有在SM2类型时使用
func GeneratePriKeyMarshalPKCS8(key crypto.PrivateKey, pwd []byte) ([]byte, error) {
   switch key.(type) {
   case *sm2.PrivateKey:
      return x509.MarshalSm2PrivateKey(key.(*sm2.PrivateKey), pwd)
   case *rsa.PrivateKey:
      return nx509.MarshalPKCS8PrivateKey(key.(*rsa.PrivateKey))
   default:
      return nil, errors.New("key type unknown")
   }
}

2、解码

import (
    nx509 "crypto/x509"
    x509  "github.com/tjfoc/gmsm/x509"
)
func GeneratePriKeyUnMarshalPKCS8(data []byte, pwd []byte) (interface{}, error) {
	c, err := base64.StdEncoding.DecodeString(string(data))
	if err != nil {
		c = data
	}
	key, err := x509.ParsePKCS8PrivateKey(c, pwd)
	if err != nil {
		return nx509.ParsePKCS8PrivateKey(c)
	} else {
		return key, err
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡笔小新1849

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值