首页 > 其他分享 >x509.MarshalSm2PrivateKey

x509.MarshalSm2PrivateKey

时间:2024-12-10 21:42:30浏览次数:2  
标签:MarshalSm2PrivateKey x509 fmt SM2 PEM -----

根据搜索结果,x509.MarshalSm2PrivateKey 函数需要两个参数:一个 *sm2.PrivateKey 和一个 []byte 类型的密码。以下是使用 x509.MarshalSm2PrivateKey 将 SM2 私钥编码为 PEM 格式的示例代码:

go
package main

import (
	"crypto/rand"
	"encoding/pem"
	"fmt"
	"github.com/tjfoc/gmsm/sm2"
	"github.com/tjfoc/gmsm/x509"
	"log"
	"os"
)

func main() {
	// 生成SM2密钥对
	privateKey, err := sm2.GenerateKey(rand.Reader)
	if err != nil {
		log.Fatalf("Failed to generate SM2 key pair: %v", err)
	}

	// 将私钥编码为PEM格式
	privateKeyBytes, err := x509.MarshalSm2PrivateKey(privateKey, []byte("password"))
	if err != nil {
		log.Fatalf("Failed to marshal private key: %v", err)
	}

	// 创建PEM块
	block := pem.Block{
		Type:    "SM2 PRIVATE KEY",
		Headers: nil,
		Bytes:   privateKeyBytes,
	}

	// 输出PEM格式的私钥
	privateKeyPEM := string(pem.EncodeToMemory(&block))
	fmt.Println("-----BEGIN EC PARAMETERS-----")
	fmt.Println("BggqgRzPVQGCLQ==")
	fmt.Println("-----END EC PARAMETERS-----")
	fmt.Println("-----BEGIN EC PRIVATE KEY-----")
	fmt.Println(strings.TrimSpace(privateKeyPEM))
	fmt.Println("-----END EC PRIVATE KEY-----")
}

代码说明:

  1. 生成密钥对:使用 sm2.GenerateKey(rand.Reader) 函数生成 SM2 密钥对。
  2. 编码为PEM格式:
    • 使用 x509.MarshalSm2PrivateKey(privateKey, []byte("password")) 将私钥编码为 PEM 格式,其中 []byte("password") 是用于加密私钥的密码。
  3. 创建PEM块:使用 pem.Block 结构体创建一个 PEM 块,类型为 "SM2 PRIVATE KEY"。
  4. 输出PEM格式的字符串:使用 pem.EncodeToMemory 将 PEM 块编码为字符串并输出。

确保你已经安装了 github.com/tjfoc/gmsm 库,可以通过以下命令安装:

sh
go get github.com/tjfoc/gmsm

运行上述代码后,你将看到 PEM 格式的 SM2 私钥输出到控制台。

标签:MarshalSm2PrivateKey,x509,fmt,SM2,PEM,-----
From: https://www.cnblogs.com/exmyth/p/18598080

相关文章

  • x509: cannot validate certificate for 192.168.0.56 because it doesn't contain an
    containerd里无法拉取镜像无法从私建的harbor上拉取报错FATA[0000]pullingimage:rpcerror:code=Unknowndesc=failedtopullandunpackimage x509:cannotvalidatecertificatefor192.168.0.56becauseitdoesn'tcontainanyIPSANs 若是配置之后还是一直报x5......
  • docker Get "https://registry-1.docker.io/v2/": x509: certificate is valid for
    前言docker在进行build时,报错:Get"https://registry-1.docker.io/v2/":x509:certificateisvalidfor问题原因:Docker客户端无法验证DockerHub服务器的SSL/TLS证书解决在/etc/docker/daemon.json中新增国内镜像源:"registry-mirrors":["https:/......
  • 宝塔面板申请 Let's Encrypt证书报错:Invalid version. The only valid version for X5
    原因是由于服务器端使用了不兼容的OpenSSL版本导致的,服务器端的X509Req版本只支持0,而宝塔这边默认的版本为2。第一种1、修改/www/server/panel/class下面的acme_v2.py文件搜索找到X509Req.set_version(2)代码段,将其改为X509Req.set_version(0)2、重启宝塔面板服......
  • 【解决了一个小问题】因为镜像证书的问题,golang http client出现错误 `tls: failed to
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯一个服务使用Docker打包镜像,部署到k8s后出现如下的错误信息:tls:failedtoverifycertificate:x509:certificatesignedbyunknownauthority出错的位置是......
  • WindowsCA证书服务(五)为nginx申请x509证书
    简介我们不止windows的IIS呀,还有nginx,apache等等服务器,这些服务器不止要证书,还要私钥呢。还有一些东东要p12格式的证书,包含证书链和私钥的单文件证书。比如说深信服的防火墙。openssl经过一番搜索,这次真得脱离windows了。即使我使用第三方软件,让你在windows下生成了密钥对,还......
  • WindowsCA证书服务(四)windows申请x509证书
    简介前面我们做了iis自己申请证书,IIS自己申请证书,IE认可,chrome不认可。这是因为chrome必须要x509的证书,带有v3扩展才可以,老版本的都被视为危险了。那么我们本次就尝试使用windows来申请x509证书。工具介绍certutil|MicrosoftLearn不建议在任何生产代码中使用 Certutil,它......
  • docker search xxx出现报错:docker 报错Error response from daemon: x509:
    问题可能出现在daemon.json配置文件1、打开此文件:vi/etc/docker/daemon.json,把境像地址换成:https://docker.mirrors.ustc.edu.cn  2、然后重启服务器:reboot(或者重启docker使用daemon.json配置文件生效也行)  重启后可以成功搜索了,随便搜索个tomcat吧:dockersearch......
  • Rancher Dashboard 无法访问 引申发现K8S报错Unable to connect to the server: x509:
    访问RancherDashboard,发现无法访问由于笔者的rancher是用docker部署的,查看rancherlog:dockerlogs[container-name]截取一部分报错如下:..2024-03-2406:52:27.085313I|embed:readytoserveclientrequests2024-03-2406:52:27.085567I|etcdserver:published{N......
  • k8s证书监控--x509-certificate-exporter
    目录k8s证书监控--x509-certificate-exporter一、下载并解压二、推送镜像到镜像仓库三、根据实际情况修改values.yaml,其他配置可不做修改四、配置监控以及告警五、异常处理k8s证书监控--x509-certificate-exporter一、下载并解压下载并解压helm包x509-certificate-exporter-3.1......
  • k3s x509
    现象root@auto-server:/home/ogreks#kubectlgetnodesE030902:06:37.085370134275memcache.go:265]couldn'tgetcurrentserverAPIgrouplist:Get"https://0.0.0.0:443/api?timeout=32s":tls:failedtoverifycertificate:x509:cannotvalid......