470 lines
22 KiB
Go
470 lines
22 KiB
Go
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
|
||
}
|