115 lines
2.5 KiB
Go
115 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto"
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"crypto/sha256"
|
|
"crypto/x509"
|
|
"encoding/base64"
|
|
"encoding/pem"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
var UserName *string
|
|
|
|
func init() {
|
|
//cfile := flag.String("c", defaultConfigFile, "config file")
|
|
//pv := flag.Bool("v", false, "print version")
|
|
//ph := flag.Bool("h", false, "print help")
|
|
UserName = flag.String("u", "omc", "user name")
|
|
|
|
flag.Parse()
|
|
// if *pv {
|
|
// os.Exit(0)
|
|
// }
|
|
// if *ph {
|
|
// flag.Usage()
|
|
// os.Exit(0)
|
|
// }
|
|
|
|
//ReadConfig(*cfile)
|
|
}
|
|
|
|
func main() {
|
|
// 假设你已经有了CMCA证书私钥和userName登录用户名
|
|
privateKeyBytes, err := os.ReadFile("./private_key.pem")
|
|
if err != nil {
|
|
fmt.Println("Failed to read private key file:", err)
|
|
return
|
|
}
|
|
//userName := "omc"
|
|
|
|
// 解析私钥
|
|
privateKey, err := parsePrivateKey(privateKeyBytes)
|
|
if err != nil {
|
|
fmt.Println("Failed to parse private key:", err)
|
|
return
|
|
}
|
|
|
|
// 对用户名进行签名
|
|
signature, err := sign(privateKey, *UserName)
|
|
if err != nil {
|
|
fmt.Println("Failed to sign username:", err)
|
|
return
|
|
}
|
|
|
|
// 将签名按Base64编码格式化输出
|
|
signatureBase64 := base64.StdEncoding.EncodeToString(signature)
|
|
fmt.Println("Signature:", signatureBase64)
|
|
}
|
|
|
|
// 解析私钥
|
|
// func parsePrivateKey(privateKeyBytes []byte) (*rsa.PrivateKey, error) {
|
|
// privateKey, err := parsePrivateKey(privateKeyBytes)
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
// return privateKey, nil
|
|
// }
|
|
|
|
// 解析私钥
|
|
func parsePrivateKey(privateKeyBytes []byte) (*rsa.PrivateKey, error) {
|
|
block, _ := pem.Decode(privateKeyBytes)
|
|
if block == nil {
|
|
return nil, fmt.Errorf("failed to decode private key")
|
|
}
|
|
|
|
//privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
|
|
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// rsaPrivateKey, ok := privateKey.(*rsa.PrivateKey)
|
|
// if !ok {
|
|
// return nil, fmt.Errorf("private key is not RSA")
|
|
// }
|
|
|
|
return privateKey, nil
|
|
}
|
|
|
|
// 对数据进行签名
|
|
func sign(privateKey *rsa.PrivateKey, data string) ([]byte, error) {
|
|
hashed := sha256.Sum256([]byte(data))
|
|
signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed[:])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return signature, nil
|
|
}
|
|
|
|
func readPrivateKey() {
|
|
// 读取私钥文件
|
|
privateKeyBytes, err := os.ReadFile("./private_key.pem")
|
|
if err != nil {
|
|
fmt.Println("Failed to read private key file:", err)
|
|
return
|
|
}
|
|
|
|
// 输出私钥内容
|
|
fmt.Println(string(privateKeyBytes))
|
|
}
|