dt_automate/tool/key.go
2025-03-20 16:44:25 +08:00

106 lines
4.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tool
/*
@Author : 李星辰
@Email : 1352113079@qq.com
@Time : 2025/03/20 16:43
@File : key.go
@Project : key
@Desc :
*/
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha1"
"crypto/x509"
"encoding/base64"
"encoding/json"
"encoding/pem"
"errors"
"log"
)
// 私钥
var privateKey = "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEA7+q7OnKKXHyX81/mkfIhSpeRMXdVh/m5ZUlCEKMRO0BQKr/D\n9M60oYyPoqMiKY85iXp2ImGzudKuxcDOAIQRB1esP1LB58XcS9G3iFU6nFTN6hC2\nj8Izy+XDkGyPx1BDuQUj/TQGsDGittDuvRPle6GSUL24eNbCp/mp29aON38+Di4R\n8fAlTbajHRRf+stBXmJLLd7mvWkB8DEi8eV7dPQ4MzTM9bUNdClD0jiQnlUCfODj\nS+Nu2UOk/+DYgJfYPARPEvHP/Rv1tkuBYZ1J0Pfre2Sq52LdHVCMw5bbeR3z1i/l\nsD4cs9B6LZtPHZIo8ntC0PrgT3PjRaF4LHFc5QIDAQABAoIBAAz2fNlCmRE4NimT\nM+0MzRmvqMuoa/ml14uOcsBdXy/5YJt+swLGLGJSKuyZrd3a/DveXwWqi8Btjr3m\nlfrXJ+hip07glNOGEEoUcbsvB7SsrFeKQaLw1kWdC30BMJ+PSal0iqZCql3YwLbq\nAQw8R/jvGO294nq899WFmtTi+dorrhG99raYcAHNfBnokTs9U2hOmwCwxGcDnQUJ\nTO00RcX/kYMarWbrTS72zE+UwRuokdbw8pBVgDOM3c72qmQwOj+Pwo2S7n4Do55p\nyhPf1ysUJZeScJqITkyjMa0tGfERkKvpNM3HBbcwX+gG+ZAG5yFf/Of99CIXBeH7\nlHvIGL0CgYEA99tU7KIX7z3tZZxIxrYQsudhrCqkO09h+yVbwCoacnOtGpS9rxK2\nw88JP8sNhztneiMgzoncHhsaAwVEopD7Rb+78Ei8yud4/AmzoxIDM56bkGnalItt\ng3OLPR+u/dyrhIhh7ymchytgbX76nmYLwjzejWRK9kRnYMrUL3mR5ZsCgYEA98ye\njZgzsb4g3rHV/8xQ0CLZV5AUDpA46IaQIQbkoSscySDyILxDnLGiM20+y8Krx5KX\nIAQHteGVLuVkqWc3eIvl5Rd02jeIr6Or2+CPrEn6kCdxWXOtkpBudgCtcSenA0Jj\n/2tjX7q/yPvrsNyBw0zrRimbTQNfy+6WKSbLL38CgYEAiAN4qxKYh9U3/VayKTmo\nGEUZOF1+Gn4JisSJgP6Z3MzV5YxSO0zNts5aiQNovRlAQ6obSrwkavD8aUPu0jc1\nbKU3ATkpQT+dCNJaHda4ow8a1zj/lhydUFGLy1MjuHPsO6KL+66eEx8en3fbGClv\nsnustXKgIFyRTnB/2D2ibpkCgYEA9pfXyMyH1P+BsluCvHXUjevAIdUtQHjhSPRw\nBY3Yg1Jl6PkyOsVe+1YCNe8nKJpnW8lTPvcDvUnprat2Cua+WuXNN7ep/2Z4TWEx\nKzRDhY5xHHdD42KsfkfgxOlTsGFnYGT3Ijz5vVAYfqfEGlK1h2bKUx4gf/k1obmi\nEP2cAX0CgYEA094N2loQbE7DHcc88ACqUB5yl93X1LhrzyiHWanJm8yGk1c17fN/\n/yE/PiGvB+kNPFV95JhbBRjVl3bRHV4a94dbgSeuaSrfDEp08l4mSqTnp08I6Z/7\naNLqThTjLOvcEjq1MahY+dzmK46GtE2L2NiYm+CKNbEyqE55pq6mWrk=\n-----END RSA PRIVATE KEY-----"
func Keyprin(b64CipherTest string) Auth_s {
pri_key, err := ReadParsePrivaterKey(privateKey)
if err != nil {
log.Println("err:", err)
}
//解码base64
decodeBytes, err := base64.StdEncoding.DecodeString(b64CipherTest)
if err != nil {
log.Println(err)
}
// log.Println([]byte(decodeBytes))
// 使用私钥解密密文
decryptedPlainText, err := rsa.DecryptOAEP(sha1.New(), rand.Reader, pri_key, decodeBytes, nil)
if err != nil {
panic(err)
}
var auth Auth_s
if err != json.Unmarshal(decryptedPlainText, &auth) {
log.Println(err)
}
// log.Printf("Decrypted plain text: %v\n", auth.Initial_time)
// log.Println(auth.Initial_time)
// log.Println(auth.End_time)
// log.Println(auth.Surplus_time)
return auth
}
// 授权信息
type Auth_s struct {
SerialNumber string `json:"serialNumber"` //主板编号
Username string `json:"username"` //用户名
Initial_time string `json:"initial_time"` //初始时间
End_time string `json:"end_time"` //结束时间
Surplus_time string `json:"surplus_time"` //授权总时长/天
Status string `json:"status"` //状态
}
// 解密
func KeyStr(b64CipherTest string) string {
pri_key, err := ReadParsePrivaterKey(privateKey)
if err != nil {
log.Println("err:", err)
}
//解码base64
decodeBytes, err := base64.StdEncoding.DecodeString(b64CipherTest)
if err != nil {
log.Println(err)
}
// log.Println([]byte(decodeBytes))
// 使用私钥解密密文
decryptedPlainText, err := rsa.DecryptOAEP(sha1.New(), rand.Reader, pri_key, decodeBytes, nil)
if err != nil {
panic(err)
}
return string(decryptedPlainText)
}
// 读取私钥文件,解析出私钥对象
func ReadParsePrivaterKey(filename string) (*rsa.PrivateKey, error) {
// 1、读取私钥文件获取私钥字节
// privateKeyBytes, err := os.ReadFile(filename)
privateKeyBytes := []byte(filename)
// if err != nil {
// return nil, err
// }
// 2、对私钥文件进行编码生成加密块对象
block, _ := pem.Decode([]byte(privateKeyBytes))
if block == nil {
return nil, errors.New("私钥信息错误!")
}
// 3、解析DER编码的私钥生成私钥对象
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
return nil, err
}
return privateKey, nil
}