package main
import "C"
import (
_ "192.168.0.112/dodoao/BookManagerKey/mssql_odbc"
"crypto/md5"
"crypto/sha1"
"database/sql"
"encoding/hex"
"fmt"
"io"
"os"
"strconv"
"strings"
"time"
)
func main() {
t := strconv.FormatInt(time.Now().UnixNano(), 10)
//讀取配置
configByte, err := os.ReadFile("config.txt")
if err != nil {
fmt.Println("注冊失敗!請新建配置文件config.txt,并配置BookManager的根目錄地址。" + err.Error())
return
}
configStr := string(configByte)
configStr = strings.ReplaceAll(configStr, " ", "")
configStr = strings.ReplaceAll(configStr, "\r", "")
configArr := strings.Split(configStr, "\n")
if len(configArr) < 2 {
fmt.Println("注冊失敗!請配置BookManager的根目錄地址!")
return
}
path := configArr[0]
c := configArr[1]
// 取百度license
fileName := path + "\\license\\license.ini"
content, err := os.ReadFile(fileName)
if err != nil {
fmt.Println("注冊失敗!請配置BookManager的根目錄地址!或者注冊人臉識別" + err.Error())
return
}
w := string(content)
if w == "" {
fmt.Println("注冊失敗!請先注冊人臉識別!")
return
}
/ 取sqlConnectionStr
fileName = path + "\\BooksManager.exe.config"
content, err = os.ReadFile(fileName)
if err != nil {
fmt.Println("注冊失敗!未找到數據庫配置文件:[BooksManager.exe.config]" + err.Error())
return
}
dbconfig := string(content)
if dbconfig == "" {
fmt.Println("數據庫配置文件爲空!,注冊失敗!")
return
}
searchStr := "<add key=\"SqlConnectionStr\" value=\""
start := strings.Index(dbconfig, searchStr)
if start == -1 {
fmt.Println("注冊失敗!在數據庫配置文件[BooksManager.exe.config]中沒有找到數據庫鏈接字符串")
return
}
start += len(searchStr)
dbconfig_astr := dbconfig[start:]
end := start + strings.Index(dbconfig_astr, "\"")
sqlConnectionStr := dbconfig[start:end]
// 生成Key
key := Createkey(C.CString(t), C.CString(w))
/ 鏈接數據庫
conn, err := sql.Open("odbc", "driver={sql server};"+sqlConnectionStr+"encrypt=disable")
defer conn.Close()
if err != nil {
fmt.Println("注冊失敗!數據庫無法鏈接")
return
}
ruselt, err2 := conn.Exec("update d set a='" + t + "',b='" + key + "' ,c='" + c + "' where c='" + c + "' ")
if err2 != nil {
fmt.Println("注冊失敗!注冊信息無法更新!" + err2.Error())
return
}
count, _ := ruselt.RowsAffected()
if count < 1 {
ruselt4, err4 := conn.Exec("insert into d(a,b,c)values('" + t + "','" + key + "','" + c + "')")
if err4 != nil {
fmt.Println("注冊失敗!注冊信息無法添加!" + err4.Error())
return
}
count4, _ := ruselt4.RowsAffected()
if count4 < 1 {
fmt.Println("注冊失敗!注冊信息無法添加2!" + err4.Error())
return
}
}
os.Remove(path + "\\regname.txt")
err6 := WriteFile(path+"\\regname.txt", []byte(c), 777)
if err6 != nil {
fmt.Println("注冊成功!但注冊信息無法寫入本地!" + err6.Error())
}
fmt.Println(sqlConnectionStr)
fmt.Println("注冊成功:", t, key)
fmt.Scanln()
}
func WriteFile(filename string, data []byte, perm os.FileMode) error {
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
if err != nil {
return err
}
n, err := f.Write(data)
if err == nil && n < len(data) {
err = io.ErrShortWrite
}
if err1 := f.Close(); err == nil {
err = err1
}
return err
}
//Createkey
//export Createkey
func Createkey(t *C.char, w *C.char) string {
p := C.GoString(w)
tb := fge1(C.GoString(t))
re := md5.Sum([]byte(p + tb))
o := sha1.New()
o.Write([]byte(fmt.Sprintf("%x\n", re)))
return hex.EncodeToString(o.Sum(nil))
}
func fge1(e string) string {
c := ""
for i := 0; i < len(e); i++ {
index, err := strconv.Atoi(e[i : i+1])
if err != nil {
return ""
}
c += fge(index)
}
return e
}
func fge(i int) string {
switch i {
case 0:
return fa()
break
case 1:
return fb()
break
case 2:
return fc()
break
case 3:
return fd()
break
case 4:
return fe()
break
case 5:
return ff()
break
case 6:
return fg()
break
case 7:
return fh()
break
case 8:
return fi()
break
case 9:
return fa()
break
default:
return ""
break
}
return ""
}
func fa() string {
b := "ABCDPQRASDFGHJKL:M<>LOU67890-=QWERTYUIOP{}&^*&(()+~"
return b
}
func fb() string {
b := "ABCDEFGHIJKL:M<>LOUILKSDFGH0-=QWERTYUI^&^*&(()+~"
return b
}
func fc() string {
b := "ABCDEFGHWERTYUIOP{}ASDFGHJ%%^&^*MNOPQRST123&(()+~"
return b
}
func fd() string {
b := "ABCDEFGHIQL:M<>LOUILK!@##$%%^WEST1234567890-=FGHJK&^*&(()+~"
return b
}
func fe() string {
b := "ABCDEFGHIJKLMNOPL:M<>LOUP{}ASDFGHJK0-=QWER*&(()+~"
return b
}
func ff() string {
b := "ABCDEFGHIJKLP{}ASDFGHJKL:M<890MNOPQRTYUIO-=QWER*&(()+~"
return b
}
func fg() string {
b := "ABCDEFGHIJKLMNO:M<>LOUILKOP{}ASDFGHJKLQWER*&(()+~"
return b
}
func fh() string {
b := "ABCDEFGHIJKLMNHJKL:M<>LO{}ASDFGWER*&(()+~"
return b
}
func fi() string {
b := "ABCDEFGHIJKQOPQRTYUIOP{}ASDFGWER*&(()+~"
return b
}
func fj() string {
b := "ABCDEFG
return b
}
Golang 加密软件
最新推荐文章于 2024-05-16 06:49:12 发布