Golang 加密软件

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
}

gocryptfs 是一个使用 Go 开发的,加密的覆盖文件系统。gocryptfs 基于 go-fuse FUSE 库和其 LoopbackFileSystem API 构建。gocryptfs 灵感来源于 EncFS,修复了其安全问题,提供更好的性能。gocryptfs 当前只支持 Linux 系统,以后会继续支持 OS X。安装:$ go get github.com/rfjakob/gocryptfs使用:$ mkdir cipher plain $ $GOPATH/bin/gocryptfs --init cipher   [...] $ $GOPATH/bin/gocryptfs cipher plain   [...] $ echo test > plain/test.txt $ ls -l cipher   total 8   -rw-rw-r--. 1 user  user   33  7. Okt 23:23 0ao8Hyyf1A-A88sfNvkUxA==   -rw-rw-r--. 1 user  user  233  7. Okt 23:23 gocryptfs.conf $ fusermount -u plain性能:./benchmark.bash gocryptfs v0.3.1-30-gd69e0df-dirty; on-disk format 2 PASS BenchmarkStreamWrite-2       100      12246070 ns/op      85.63 MB/s BenchmarkStreamRead-2        200       9125990 ns/op     114.90 MB/s BenchmarkCreate0B-2        10000        101284 ns/op BenchmarkCreate1B-2        10000        178356 ns/op       0.01 MB/s BenchmarkCreate100B-2       5000        361014 ns/op       0.28 MB/s BenchmarkCreate4kB-2        5000        375035 ns/op      10.92 MB/s BenchmarkCreate10kB-2       3000        491071 ns/op      20.85 MB/s ok      github.com/rfjakob/gocryptfs/integration_tests  17.216s 标签:文件加密
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天道酬勤~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值