gouy_auth/main.go
2025-03-26 20:22:55 +08:00

470 lines
22 KiB
Go
Raw Permalink 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 main
/*
@Author : Uyynot
@Email : uyynot@qq.com
@Time : 2023/11/20 10:07
@File : test.go
@Project : test
@Desc :
*/
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha1"
"crypto/x509"
"database/sql"
"encoding/base64"
"encoding/json"
"encoding/pem"
"errors"
"gouy_key_gui_auth/dbpool"
"log"
"strconv"
"time"
)
// 解析公钥
func ReadParsePublicKey(filename string) (*rsa.PublicKey, error) {
//获取公钥字节
// publicKeyBytes, err := os.ReadFile(filename)
publicKeyBytes := []byte(filename)
//fmt.Println("publicKeyBytes:", publicKeyBytes)
// fmt.Println("err:", err)
// if err != nil {
// return nil, err
// }
// 2、解码公钥字节生成加密块对象
block, _ := pem.Decode([]byte(publicKeyBytes))
//fmt.Println("block:", block)
//fmt.Println("rest:", rest)
if block == nil {
return nil, errors.New("公钥信息有误")
}
//3、解析DER编码的公钥生成公钥接口
publicKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
//fmt.Println("publicKeyInterface:", publicKeyInterface)
//fmt.Println("err:", err)
if err != nil {
return nil, err
}
// 4、公钥接口转型成公钥对象
publicKey := publicKeyInterface.(*rsa.PublicKey)
//fmt.Println("publicKey:", publicKey)
return publicKey, nil
}
// 读取私钥文件,解析出私钥对象
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
}
// 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"` //剩余时间
// }
// // 计算时间差
// func SubDays(t1, t2 time.Time) (day int64) {
// day = int64(t1.Sub(t2).Hours() / 24)
// return day
// }
// // 授权申请
// func Auth(user, number string) string {
// var auth Auth_s
// year, month, day := time.Now().Date()
// today := time.Date(year, month, day, 0, 0, 0, 0, time.Local)
// // oldTime := timestamp.AddDate(0, 0, 30)
// // 昨日日期
// yesterday := today.AddDate(0, 0, 5)
// fmt.Println("昨日日期:", yesterday)
// auth.Initial_time = today.String() //初始时间
// auth.End_time = yesterday.String() //结束时间
// auth.Username = user //用户名
// auth.SerialNumber = number //主板编号
// auth.Surplus_time = strconv.FormatInt(SubDays(yesterday, today), 10) //剩余时间
// log.Println(today)
// log.Println(yesterday)
// log.Println(SubDays(yesterday, today))
// a, err := json.Marshal(auth)
// if err != nil {
// log.Println(err)
// }
// // log.Println(string(a))
// pub_key, err := ReadParsePublicKey("-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7+q7OnKKXHyX81/mkfIh\nSpeRMXdVh/m5ZUlCEKMRO0BQKr/D9M60oYyPoqMiKY85iXp2ImGzudKuxcDOAIQR\nB1esP1LB58XcS9G3iFU6nFTN6hC2j8Izy+XDkGyPx1BDuQUj/TQGsDGittDuvRPl\ne6GSUL24eNbCp/mp29aON38+Di4R8fAlTbajHRRf+stBXmJLLd7mvWkB8DEi8eV7\ndPQ4MzTM9bUNdClD0jiQnlUCfODjS+Nu2UOk/+DYgJfYPARPEvHP/Rv1tkuBYZ1J\n0Pfre2Sq52LdHVCMw5bbeR3z1i/lsD4cs9B6LZtPHZIo8ntC0PrgT3PjRaF4LHFc\n5QIDAQAB\n-----END PUBLIC KEY----- ")
// if err != nil {
// log.Println(err)
// }
// cipherText, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pub_key, a, nil)
// b64CipherTest := base64.StdEncoding.EncodeToString(cipherText)
// if err != nil {
// panic(err)
// }
// return b64CipherTest
// }
func main() {
//SetFlags函数用来设置标准logger的输出配置
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
// log.Println(Auth("嘿哈", "MMG5S0000098814GP00RE"))
log.Println(clientText("18835251905", "MMG5S0000098814GP00RE", "李超", "5", "2"))
log.Println(apiText("18835251905", "李超", "5", "1"))
// log.Println(jiamiinfo("Lc753951!!"))
// db.Set_HAXI("auth", "MMG5S0000098814GP00RE", Auth("嘿哈", "MMG5S0000098814GP00RE"))
// pub_key, err := ReadParsePublicKey("PublicKey.pem")
// pub_key, err := ReadParsePublicKey("-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7+q7OnKKXHyX81/mkfIh\nSpeRMXdVh/m5ZUlCEKMRO0BQKr/D9M60oYyPoqMiKY85iXp2ImGzudKuxcDOAIQR\nB1esP1LB58XcS9G3iFU6nFTN6hC2j8Izy+XDkGyPx1BDuQUj/TQGsDGittDuvRPl\ne6GSUL24eNbCp/mp29aON38+Di4R8fAlTbajHRRf+stBXmJLLd7mvWkB8DEi8eV7\ndPQ4MzTM9bUNdClD0jiQnlUCfODjS+Nu2UOk/+DYgJfYPARPEvHP/Rv1tkuBYZ1J\n0Pfre2Sq52LdHVCMw5bbeR3z1i/lsD4cs9B6LZtPHZIo8ntC0PrgT3PjRaF4LHFc\n5QIDAQAB\n-----END PUBLIC KEY----- ")
// log.Println("err:", err)
// // pri_key, err := ReadParsePrivaterKey("PrivateKey.pem")
// pri_key, err := ReadParsePrivaterKey("-----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-----")
// log.Println("err:", err)
// // log.Println("pub_key:", pub_key)
// // log.Println("pri_key:", pri_key)
// // 要加密的明文
// plainText := []byte("时间")
// // plainText := []byte("{\"app_id\":\"123456789\", \"app_secret\":\"abcdefg%*sdfsdfsfd\",\"timestamp\":1698893284836}")
// // 使用公钥加密明文
// cipherText, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pub_key, plainText, nil)
// if err != nil {
// panic(err)
// }
// // log.Printf("Cipher text: %x\n", cipherText)
// //编码base64
// b64CipherTest := base64.StdEncoding.EncodeToString(cipherText)
// log.Println("b64CipherTest:", b64CipherTest)
// //解码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)
// }
// log.Printf("Decrypted plain text: %s\n", decryptedPlainText)
//// 生成一对RSA公私钥
//privKey, err := rsa.GenerateKey(rand.Reader, 2048)
//if err != nil {
// panic(err)
//}
//// 要加密的明文
//plainText := []byte("Hello RSA!")
//// 使用公钥加密明文
//cipherText, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, &privKey.PublicKey, plainText, nil)
//if err != nil {
// panic(err)
//}
//fmt.Printf("Cipher text: %x\n", cipherText)
//// 使用私钥解密密文
//decryptedPlainText, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, privKey, cipherText, nil)
//if err != nil {
// panic(err)
//}
//fmt.Printf("Decrypted plain text: %s\n", decryptedPlainText)
//// 签名消息
//hashed := sha256.Sum256([]byte("message to be signed"))
//signature, err := rsa.SignPKCS1v15(rand.Reader, privKey, crypto.SHA256, hashed[:])
//if err != nil {
// panic(err)
//}
//fmt.Printf("Signature: %x\n", signature)
//// 验证签名
//err = rsa.VerifyPKCS1v15(&privKey.PublicKey, crypto.SHA256, hashed[:], signature)
//if err != nil {
// panic(err)
//}
}
type Auth struct {
Mobile_phone_number string `json:"mobile_phone_number"` //手机号
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"` //剩余时间
Key string `json:"key"` //授权密钥
Status string `json:"status"` //状态
}
type Douy_info struct {
Mobile_phone_number sql.NullString
SerialNumber sql.NullString
Username sql.NullString
Initial_time sql.NullString
End_time sql.NullString
Surplus_time sql.NullString
Key sql.NullString
}
// info加密
func jiamiinfo(a string) string {
pub_key, err := ReadParsePublicKey("-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7+q7OnKKXHyX81/mkfIh\nSpeRMXdVh/m5ZUlCEKMRO0BQKr/D9M60oYyPoqMiKY85iXp2ImGzudKuxcDOAIQR\nB1esP1LB58XcS9G3iFU6nFTN6hC2j8Izy+XDkGyPx1BDuQUj/TQGsDGittDuvRPl\ne6GSUL24eNbCp/mp29aON38+Di4R8fAlTbajHRRf+stBXmJLLd7mvWkB8DEi8eV7\ndPQ4MzTM9bUNdClD0jiQnlUCfODjS+Nu2UOk/+DYgJfYPARPEvHP/Rv1tkuBYZ1J\n0Pfre2Sq52LdHVCMw5bbeR3z1i/lsD4cs9B6LZtPHZIo8ntC0PrgT3PjRaF4LHFc\n5QIDAQAB\n-----END PUBLIC KEY----- ")
if err != nil {
log.Println(err)
}
cipherText, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pub_key, []byte(a), nil)
b64CipherTest := base64.StdEncoding.EncodeToString(cipherText)
if err != nil {
panic(err)
}
// log.Println(b64CipherTest)
return b64CipherTest
}
// 客户端授权
// 手机号,主板号,姓名,天数,状态
func clientText(phone, number, name, dayss, status string) string {
inits := Timestamp("second") //当前时间
aaa, err := strconv.Atoi(dayss)
new := time.Unix(inits, 0).AddDate(0, 0, aaa).Unix() //截至时间
duration := time.Unix(new, 0).Sub(time.Unix(inits, 0))
days := int(duration / (24 * time.Hour)) //天
hours := int(duration % (24 * time.Hour) / time.Hour) //小时
minutes := int(duration / time.Minute % 60) //分钟
secod := int(duration / time.Second % 60) //秒
// log.Println(days, hours, minutes, secod) //剩余时间
auths := Auth{
Mobile_phone_number: phone,
SerialNumber: number,
Username: name,
Initial_time: strconv.FormatInt(inits, 10),
End_time: strconv.FormatInt(new, 10),
Surplus_time: strconv.Itoa(days) + "天" + strconv.Itoa(hours) + "小时" + strconv.Itoa(minutes) + "分钟" + strconv.Itoa(secod) + "秒",
Status: status,
}
a, err := json.Marshal(auths)
pub_key, err := ReadParsePublicKey("-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7+q7OnKKXHyX81/mkfIh\nSpeRMXdVh/m5ZUlCEKMRO0BQKr/D9M60oYyPoqMiKY85iXp2ImGzudKuxcDOAIQR\nB1esP1LB58XcS9G3iFU6nFTN6hC2j8Izy+XDkGyPx1BDuQUj/TQGsDGittDuvRPl\ne6GSUL24eNbCp/mp29aON38+Di4R8fAlTbajHRRf+stBXmJLLd7mvWkB8DEi8eV7\ndPQ4MzTM9bUNdClD0jiQnlUCfODjS+Nu2UOk/+DYgJfYPARPEvHP/Rv1tkuBYZ1J\n0Pfre2Sq52LdHVCMw5bbeR3z1i/lsD4cs9B6LZtPHZIo8ntC0PrgT3PjRaF4LHFc\n5QIDAQAB\n-----END PUBLIC KEY----- ")
cipherText, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pub_key, a, nil)
b64CipherTest := base64.StdEncoding.EncodeToString(cipherText)
if err != nil {
panic(err)
}
// log.Println(b64CipherTest)
//查询sql 获取用户信息
rows, err := dbpool.Query("SELECT mobile_phone_number,serialNumber,status FROM `douy`.`douy_info` WHERE mobile_phone_number = ? AND serialNumber=? AND status=? ", phone, number, status)
if err != nil {
log.Println(err)
}
defer rows.Close()
// var typecho_userss []dbpool.Typecho_users
var (
phoneStr sql.NullString
numberStr sql.NullString
statusStr sql.NullString
)
for rows.Next() {
if err := rows.Scan(&phoneStr, &numberStr, &statusStr); err != nil {
log.Println(err)
}
// typecho_userss = append(typecho_userss, users)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
if !phoneStr.Valid && !numberStr.Valid && !statusStr.Valid {
result, err := dbpool.ExecuteSQL("INSERT INTO douy_info (mobile_phone_number, serialNumber, username, initial_time, end_time,surplus_time,`key`,status) VALUES (?,?, ?, ?, ?, ?,?,?);", phone, number, name, strconv.FormatInt(inits, 10), strconv.FormatInt(new, 10), strconv.Itoa(days)+"天"+strconv.Itoa(hours)+"小时"+strconv.Itoa(minutes)+"分钟"+strconv.Itoa(secod)+"秒", b64CipherTest, status)
if err != nil {
log.Println(err)
}
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Insert ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
} else {
result, err := dbpool.ExecuteSQL("UPDATE douy_info SET mobile_phone_number=?, username=?, initial_time=?,end_time=?,surplus_time=?,`key`=? ,status=? where serialNumber = ? ", phone, name, strconv.FormatInt(inits, 10), strconv.FormatInt(new, 10), strconv.Itoa(days)+"天"+strconv.Itoa(hours)+"小时"+strconv.Itoa(minutes)+"分钟"+strconv.Itoa(secod)+"秒", b64CipherTest, status, number)
log.Println(err)
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Update ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
}
return b64CipherTest
}
// api授权
// 手机号,姓名,天数,状态
func apiText(phone, name, dayss, status string) string {
inits := Timestamp("second") //当前时间
aaa, err := strconv.Atoi(dayss)
new := time.Unix(inits, 0).AddDate(0, 0, aaa).Unix() //截至时间
duration := time.Unix(new, 0).Sub(time.Unix(inits, 0))
days := int(duration / (24 * time.Hour)) //天
hours := int(duration % (24 * time.Hour) / time.Hour) //小时
minutes := int(duration / time.Minute % 60) //分钟
secod := int(duration / time.Second % 60) //秒
// log.Println(days, hours, minutes, secod) //剩余时间
auths := Auth{
Mobile_phone_number: phone,
SerialNumber: "api不涉及该项",
Username: name,
Initial_time: strconv.FormatInt(inits, 10),
End_time: strconv.FormatInt(new, 10),
Surplus_time: strconv.Itoa(days) + "天" + strconv.Itoa(hours) + "小时" + strconv.Itoa(minutes) + "分钟" + strconv.Itoa(secod) + "秒",
Status: status,
}
a, err := json.Marshal(auths)
pub_key, err := ReadParsePublicKey("-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7+q7OnKKXHyX81/mkfIh\nSpeRMXdVh/m5ZUlCEKMRO0BQKr/D9M60oYyPoqMiKY85iXp2ImGzudKuxcDOAIQR\nB1esP1LB58XcS9G3iFU6nFTN6hC2j8Izy+XDkGyPx1BDuQUj/TQGsDGittDuvRPl\ne6GSUL24eNbCp/mp29aON38+Di4R8fAlTbajHRRf+stBXmJLLd7mvWkB8DEi8eV7\ndPQ4MzTM9bUNdClD0jiQnlUCfODjS+Nu2UOk/+DYgJfYPARPEvHP/Rv1tkuBYZ1J\n0Pfre2Sq52LdHVCMw5bbeR3z1i/lsD4cs9B6LZtPHZIo8ntC0PrgT3PjRaF4LHFc\n5QIDAQAB\n-----END PUBLIC KEY----- ")
cipherText, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pub_key, a, nil)
b64CipherTest := base64.StdEncoding.EncodeToString(cipherText)
if err != nil {
panic(err)
}
// log.Println(b64CipherTest)
//查询sql 获取用户信息
rows, err := dbpool.Query("SELECT mobile_phone_number,status FROM `douy`.`douy_info` WHERE mobile_phone_number = ? AND status=? ", phone, status)
if err != nil {
log.Println(err)
}
defer rows.Close()
// var typecho_userss []dbpool.Typecho_users
var (
phoneStr sql.NullString
statusStr sql.NullString
)
for rows.Next() {
if err := rows.Scan(&phoneStr, &statusStr); err != nil {
log.Println(err)
}
// typecho_userss = append(typecho_userss, users)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
if !phoneStr.Valid && !statusStr.Valid {
result, err := dbpool.ExecuteSQL("INSERT INTO douy_info (mobile_phone_number, serialNumber, username, initial_time, end_time,surplus_time,`key`,status) VALUES (?,?, ?, ?, ?, ?,?,?);", phone, auths.SerialNumber, name, strconv.FormatInt(inits, 10), strconv.FormatInt(new, 10), strconv.Itoa(days)+"天"+strconv.Itoa(hours)+"小时"+strconv.Itoa(minutes)+"分钟"+strconv.Itoa(secod)+"秒", b64CipherTest, status)
if err != nil {
log.Println(err)
}
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Insert ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
} else {
result, err := dbpool.ExecuteSQL("UPDATE douy_info SET mobile_phone_number=?, username=?, initial_time=?,end_time=?,surplus_time=?,`key`=? ,status=? where mobile_phone_number = ? AND status=?;", phone, name, strconv.FormatInt(inits, 10), strconv.FormatInt(new, 10), strconv.Itoa(days)+"天"+strconv.Itoa(hours)+"小时"+strconv.Itoa(minutes)+"分钟"+strconv.Itoa(secod)+"秒", b64CipherTest, status, phone, status)
log.Println(err)
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Update ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
}
return b64CipherTest
}
// 手机号,主板号,姓名,天数
func jiami(phone, serialNumber, name, dayss, status string) string {
inits := Timestamp("second") //当前时间
log.Println(inits)
aaa, err := strconv.Atoi(dayss)
if err != nil {
log.Println(err)
}
new := time.Unix(inits, 0).AddDate(0, 0, aaa).Unix() //截至时间
log.Println(new)
duration := time.Unix(new, 0).Sub(time.Unix(inits, 0))
days := int(duration / (24 * time.Hour)) //天
hours := int(duration % (24 * time.Hour) / time.Hour) //小时
minutes := int(duration / time.Minute % 60) //分钟
secod := int(duration / time.Second % 60) //秒
log.Println(days, hours, minutes, secod) //剩余时间
auths := Auth{
Mobile_phone_number: phone,
SerialNumber: serialNumber,
Username: name,
Initial_time: strconv.FormatInt(inits, 10),
End_time: strconv.FormatInt(new, 10),
Surplus_time: strconv.Itoa(days) + "天" + strconv.Itoa(hours) + "小时" + strconv.Itoa(minutes) + "分钟" + strconv.Itoa(secod) + "秒",
Status: status,
}
a, err := json.Marshal(auths)
pub_key, err := ReadParsePublicKey("-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7+q7OnKKXHyX81/mkfIh\nSpeRMXdVh/m5ZUlCEKMRO0BQKr/D9M60oYyPoqMiKY85iXp2ImGzudKuxcDOAIQR\nB1esP1LB58XcS9G3iFU6nFTN6hC2j8Izy+XDkGyPx1BDuQUj/TQGsDGittDuvRPl\ne6GSUL24eNbCp/mp29aON38+Di4R8fAlTbajHRRf+stBXmJLLd7mvWkB8DEi8eV7\ndPQ4MzTM9bUNdClD0jiQnlUCfODjS+Nu2UOk/+DYgJfYPARPEvHP/Rv1tkuBYZ1J\n0Pfre2Sq52LdHVCMw5bbeR3z1i/lsD4cs9B6LZtPHZIo8ntC0PrgT3PjRaF4LHFc\n5QIDAQAB\n-----END PUBLIC KEY----- ")
if err != nil {
log.Println(err)
}
cipherText, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pub_key, a, nil)
b64CipherTest := base64.StdEncoding.EncodeToString(cipherText)
if err != nil {
panic(err)
}
log.Println(b64CipherTest)
// 调用ExecuteSQL函数执行插入操作
result, err := dbpool.ExecuteSQL("INSERT INTO douy_info (mobile_phone_number, serialNumber, username, initial_time, end_time,surplus_time,`key`,status) VALUES (?,?, ?, ?, ?, ?,?,?);", phone, serialNumber, name, strconv.FormatInt(inits, 10), strconv.FormatInt(new, 10), strconv.Itoa(days)+"天"+strconv.Itoa(hours)+"小时"+strconv.Itoa(minutes)+"分钟"+strconv.Itoa(secod)+"秒", b64CipherTest, status)
if err != nil {
result, err := dbpool.ExecuteSQL("UPDATE douy_info SET mobile_phone_number=?, username=?, initial_time=?,end_time=?,surplus_time=?,`key`=? where serialNumber = ? ", phone, name, strconv.FormatInt(inits, 10), strconv.FormatInt(new, 10), strconv.Itoa(days)+"天"+strconv.Itoa(hours)+"小时"+strconv.Itoa(minutes)+"分钟"+strconv.Itoa(secod)+"秒", b64CipherTest, serialNumber)
log.Println(err)
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Insert ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
log.Println(err)
}
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
rowsAffected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("Last Insert ID: %d, Rows Affected: %d\n", lastInsertId, rowsAffected)
return b64CipherTest
}