123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- package fllcc
- import (
- "crypto/md5"
- "encoding/base64"
- "encoding/hex"
- "errors"
- "fmt"
- "log"
- "math/rand"
- "net"
- "net/url"
- "strings"
- "time"
- )
- var random *rand.Rand
- func init() {
- random = rand.New(rand.NewSource(time.Now().Unix()))
- }
- func getFreePort() (int, error) {
- for i := 4000; i <= 5000; i++ {
- if portIsFree(i) {
- return i, nil
- }
- }
- return 0, errors.New("没有可用端口")
- }
- func portIsFree(checkPort int) bool {
- addr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("localhost:%d", checkPort))
- if err != nil {
- return false
- }
- l, err := net.ListenTCP("tcp", addr)
- if err != nil {
- return false
- }
- defer l.Close()
- return true
- }
- func urlToABS(base, reference string) (string, error) {
- u, err := url.Parse(reference)
- if err != nil {
- return "", err
- }
- baseUrl, err := url.Parse(base)
- if err != nil {
- return "", err
- }
- return baseUrl.ResolveReference(u).String(), nil
- }
- func DescData(content string, secretKey string) (string, error) {
- return descData(content, secretKey)
- }
- func descData(content string, secretKey string) (string, error) {
- lockStream := "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456"
- lockLen := len(lockStream)
- enLend := len(content)
- randomLock := string([]rune(content)[enLend-1])
- lockCount := strings.Index(lockStream, randomLock)
- password := getMD5Hash(secretKey + randomLock)
- txtStream := content[0 : enLend-1]
- tmpStream := ""
- k := 0
- for i := 0; i < len(txtStream); i++ {
- if k == len(password) {
- k = 0
- }
- pwdInt := password[k]
- findStr := string([]rune(txtStream)[i])
- j := strings.Index(lockStream, findStr) - lockCount - int(pwdInt)
- for {
- if j >= 0 {
- break
- }
- j += lockLen
- }
- tmpStream += string([]rune(lockStream)[j])
- k++
- }
- byteList, err := base64.StdEncoding.DecodeString(tmpStream)
- if err != nil {
- return "", err
- }
- return string(byteList), nil
- }
- func EncData(txtStream string, secretKey string) (string, error) {
- password := secretKey
- lockstream := "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456"
- //随机找一个数字,并从密锁串中找到一个密锁值
- lockLen := len(lockstream)
- lockCount := random.Int31n(int32(lockLen))
- randomLock := string([]rune(lockstream)[lockCount])
- password = getMD5Hash(password + randomLock)
- txtStream = base64.StdEncoding.EncodeToString([]byte(txtStream))
- tmpStream := ""
- j := 0
- k := 0
- for i := 0; i < len(txtStream); i++ {
- if k == len(password) {
- k = 0
- }
- findChar := string([]rune(txtStream)[i])
- j = (strings.Index(lockstream, findChar) + int(lockCount) + int(password[k])) % lockLen
- tmpStream += string([]rune(lockstream)[j])
- k++
- }
- return tmpStream + randomLock, nil
- }
- func getMD5Hash(text string) string {
- hash := md5.Sum([]byte(text))
- return hex.EncodeToString(hash[:])
- }
- func outputLog(v ...interface{}) {
- logStr := fmt.Sprintln(v...)
- log.Println(logStr)
- //_, _ = logBuffer.Write([]byte(logStr))
- }
|