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)) }