update at 2023/08/14
This commit is contained in:
BIN
tools/cmsign/cmsign
Normal file
BIN
tools/cmsign/cmsign
Normal file
Binary file not shown.
BIN
tools/cmsign/cmsign.exe
Normal file
BIN
tools/cmsign/cmsign.exe
Normal file
Binary file not shown.
114
tools/cmsign/cmsign.go
Normal file
114
tools/cmsign/cmsign.go
Normal file
@@ -0,0 +1,114 @@
|
||||
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))
|
||||
}
|
||||
27
tools/cmsign/private_key.pem
Normal file
27
tools/cmsign/private_key.pem
Normal file
@@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEpAIBAAKCAQEAlE3BYk9Rk2avUTik7lpuiHxbYTusrLYRCnr8JICRg0QsBfiu
|
||||
q8d4+4s0w3y5F7puTj23Hf8ohAeNGK6vV9nJF9utMRvT4w5hlGqvKubM2vORoNoa
|
||||
1usIixfcvMmCt/7++9endMurLY7e9aR+eeEffJtMx5G5JqxRGoFkeXBKFTOjD2ad
|
||||
sHQ5zhQQUYgdQa2xzKQBYiierKKptcoVMAnnkfx7NPSRfCnzhYVeKgBFbxNXL4h7
|
||||
nAhLywWhusQc2yr2Fdojj7urtqPNfMKYapkmWKI9/zuPxMlYL49VXUqppE0rnYoi
|
||||
ISwGvP9iSq1tb+8BUI0ZMDcHX4elEeZYiFMJOwIDAQABAoIBAFVJVhIsXVRwdBg4
|
||||
hBkS5ogVRBPp1obIeYpWadSwH36m4M5aUlE1eKzoRGK7wlIUA8V5FmroxysOkKUG
|
||||
KI5UD6Jp0fLw9uyX46QPqkb4zgyIkFI5u7+nEJW1Flt3Y3Ze7dJ1FbdEPWAIzs3j
|
||||
WFzNC2eEhCYs9pZ3+HhOuzJfUitYU6ts83tazSms+7E027e/v2ubtYOzluEoj4YK
|
||||
MM+ocqJOlXUOhyTATDaLs4fM567bwwFeriODQqmMIhXLf3HiBPfPYhoAlwPUV51L
|
||||
bAjIPwG2/jy0yXPenYOUqSMP1i+XkyTL4eVqOLLQUI+BsEaToS8M7Lf4KRQE0vQm
|
||||
uAkEA9ECgYEAxCsKXtkYXrma8UziSJgQBj88TfACyuYZBPkpBFJhffPVOreYzqmn
|
||||
gsE38oHlLhCrezsxvScivS/Cwt7kgBTE9r6xmH8y2f0P3PNmtazQCqovG1gsNZ1t
|
||||
9PZQmxbVUfx/7KRJ1Q5zX3x5C0P2c6XYv/1h/SQQ8PYXDhRxWZFVSikCgYEAwYlt
|
||||
AoP8j6yHDMk10vJd0fKT1lztcHcQLvH3HQn2kHci2GCxySvcac49hpXTDeNdUzcQ
|
||||
I9UWo1MggNojME3WHUTiZD5DYUzuNUBTkc0kMHWy79/YNAzvF9312MSyJ0NlytBQ
|
||||
ISh0z0sPSxDjW+XCi/8LGu1rrremBqvh0rNIrMMCgYEAt+C8VNHcZRZHpX3y8icP
|
||||
hjuKFGgwxe3Pb/j5uKJb3ktMCUEFjFo8uXTSM5AMuhRIGTgQVIS1rG5zemSh/Wj6
|
||||
g2uWXyKEEQ+D6hGBqjP1wrlpdJE+x3btFdw5DFbn2HT9mF0bFAn6nXu4npWzEw5X
|
||||
UQd67WT8OFIEpF8HLPTs5JkCgYBQlL6dmITU8Vm9mh1d+mnT23NwgnqeJATJ9xcT
|
||||
sS1HE0Of4grEHw4Dw8pcOg+JLcyStE91C+kEEb1ryOdz2kS3JRI5+K6nWZeo9mKV
|
||||
R1u1DZx2QbZMXcJDJriRC7y9mlNMsZVbaPPRx4fTknGHts9c6NEf4hC+y1pGVtSM
|
||||
nPc6bwKBgQCrtb6srow9o0acH7mMmieDuqvT8DQ6rHWoizgneZTuvIo6SPO6nRnR
|
||||
jfgfQkqr9IiLh9awSblQEN9fnddog7a1yS4cUZueiP5dmtFvp4B9Scnt+BoHpOLk
|
||||
rrU2i7grAye4Cd003+pqhSERGCKSzb3fTSYiMypKsxeH2bs8nrRu2A==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
Reference in New Issue
Block a user