first commit
This commit is contained in:
		
						commit
						cacf168a5b
					
				
							
								
								
									
										671
									
								
								starainrt.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										671
									
								
								starainrt.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,671 @@
 | 
				
			|||||||
 | 
					package starainrt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"crypto/md5"
 | 
				
			||||||
 | 
						"crypto/rc4"
 | 
				
			||||||
 | 
						"crypto/sha1"
 | 
				
			||||||
 | 
						"crypto/sha256"
 | 
				
			||||||
 | 
						"crypto/sha512"
 | 
				
			||||||
 | 
						"encoding/base64"
 | 
				
			||||||
 | 
						"encoding/hex"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"hash/crc32"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
						"io/ioutil"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"regexp"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Exists(filepath string) bool {
 | 
				
			||||||
 | 
						_, err := os.Stat(filepath)
 | 
				
			||||||
 | 
						if err != nil && os.IsNotExist(err) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func IsFile(fpath string) bool {
 | 
				
			||||||
 | 
						s, err := os.Stat(fpath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return !s.IsDir()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func ReWriteFileByKV(filepath, rem, conn, ret string, kv map[string]string) bool {
 | 
				
			||||||
 | 
						var outputstr string
 | 
				
			||||||
 | 
						var ataru bool = false
 | 
				
			||||||
 | 
						if (!Exists(filepath)) || (!IsFile(filepath)) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fso, err := os.Open(filepath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile("^" + rem)
 | 
				
			||||||
 | 
						buf := bufio.NewReader(fso)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							bytxt, _, eof := buf.ReadLine()
 | 
				
			||||||
 | 
							if eof == io.EOF {
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							txt := strings.TrimSpace(string(bytxt))
 | 
				
			||||||
 | 
							if rempar.Match([]byte(txt)) {
 | 
				
			||||||
 | 
								outputstr += txt + ret
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							for k, v := range kv {
 | 
				
			||||||
 | 
								keypar := regexp.MustCompile("^" + k)
 | 
				
			||||||
 | 
								if keypar.Match([]byte(txt)) {
 | 
				
			||||||
 | 
									ataru = true
 | 
				
			||||||
 | 
									outputstr += k + conn + v + ret
 | 
				
			||||||
 | 
									delete(kv, k)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if ataru {
 | 
				
			||||||
 | 
								ataru = false
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								outputstr += txt + ret
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fso.Close()
 | 
				
			||||||
 | 
						if len(kv) != 0 {
 | 
				
			||||||
 | 
							for k, v := range kv {
 | 
				
			||||||
 | 
								outputstr += k + conn + v + ret
 | 
				
			||||||
 | 
								delete(kv, k)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						err = ioutil.WriteFile(filepath, []byte(outputstr), 0755)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetINIValue(filepath, rem, conn string, kv []string) (bool, map[string]string) {
 | 
				
			||||||
 | 
						outputstr := make(map[string]string)
 | 
				
			||||||
 | 
						if (!Exists(filepath)) || (!IsFile(filepath)) {
 | 
				
			||||||
 | 
							return false, outputstr
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fso, err := os.Open(filepath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return false, outputstr
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile("^" + rem)
 | 
				
			||||||
 | 
						buf := bufio.NewReader(fso)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							bytxt, _, eof := buf.ReadLine()
 | 
				
			||||||
 | 
							if eof == io.EOF {
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							txt := strings.TrimSpace(string(bytxt))
 | 
				
			||||||
 | 
							if rempar.Match([]byte(txt)) {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							var i int = 0
 | 
				
			||||||
 | 
							var v2 string
 | 
				
			||||||
 | 
							for k, v := range kv {
 | 
				
			||||||
 | 
								if v == "" {
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								v2 = ""
 | 
				
			||||||
 | 
								for _, b := range []byte(v) {
 | 
				
			||||||
 | 
									switch string(b) {
 | 
				
			||||||
 | 
									case ".":
 | 
				
			||||||
 | 
										v2 += "\\."
 | 
				
			||||||
 | 
									case "\\":
 | 
				
			||||||
 | 
										v2 += "\\"
 | 
				
			||||||
 | 
									case "-":
 | 
				
			||||||
 | 
										v2 += "\\-"
 | 
				
			||||||
 | 
									case "(":
 | 
				
			||||||
 | 
										v2 += "\\("
 | 
				
			||||||
 | 
									case ")":
 | 
				
			||||||
 | 
										v2 += "\\)"
 | 
				
			||||||
 | 
									case "{":
 | 
				
			||||||
 | 
										v2 += "\\{"
 | 
				
			||||||
 | 
									case "}":
 | 
				
			||||||
 | 
										v2 += "\\}"
 | 
				
			||||||
 | 
									case "[":
 | 
				
			||||||
 | 
										v2 += "\\["
 | 
				
			||||||
 | 
									case "]":
 | 
				
			||||||
 | 
										v2 += "\\]"
 | 
				
			||||||
 | 
									case "$":
 | 
				
			||||||
 | 
										v2 += "\\]$"
 | 
				
			||||||
 | 
									case "^":
 | 
				
			||||||
 | 
										v2 += "\\^"
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										v2 += string(b)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								keypar := regexp.MustCompile("^" + v2 + ".*?" + conn + "(.*)")
 | 
				
			||||||
 | 
								if keypar.Match([]byte(txt)) {
 | 
				
			||||||
 | 
									i++
 | 
				
			||||||
 | 
									kekka := keypar.FindSubmatch([]byte(txt))
 | 
				
			||||||
 | 
									outputstr[v] = string(kekka[1])
 | 
				
			||||||
 | 
									kv[k] = ""
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if i != len(kv) {
 | 
				
			||||||
 | 
								for _, v := range kv {
 | 
				
			||||||
 | 
									if v != "" {
 | 
				
			||||||
 | 
										outputstr[v] = ""
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true, outputstr
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SmallEncodeFileByBase64(filepath, outputname string, buffer int) bool {
 | 
				
			||||||
 | 
						if !Exists(filepath) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile(`(.*)\*(.*)`)
 | 
				
			||||||
 | 
						if !rempar.Match([]byte(outputname)) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rest := rempar.FindSubmatch([]byte(outputname))
 | 
				
			||||||
 | 
						par1 := string(rest[1])
 | 
				
			||||||
 | 
						par2 := string(rest[2])
 | 
				
			||||||
 | 
						bfile, _ := ioutil.ReadFile(filepath)
 | 
				
			||||||
 | 
						bitlen := len(bfile)
 | 
				
			||||||
 | 
						i := 1
 | 
				
			||||||
 | 
						var seed int = buffer
 | 
				
			||||||
 | 
						if bitlen > seed {
 | 
				
			||||||
 | 
							for bitlen > seed {
 | 
				
			||||||
 | 
								coder := base64.StdEncoding.EncodeToString(bfile[seed*(i-1) : seed*i])
 | 
				
			||||||
 | 
								ioutil.WriteFile(par1+strconv.Itoa(i)+par2, []byte(coder), 0755)
 | 
				
			||||||
 | 
								i++
 | 
				
			||||||
 | 
								bitlen -= seed
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						coder := base64.StdEncoding.EncodeToString(bfile[seed*(i-1):])
 | 
				
			||||||
 | 
						ioutil.WriteFile(par1+strconv.Itoa(i)+par2, []byte(coder), 0755)
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SmallDecodeFileByBase64(inputname, outputname string, filesum int) bool {
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile(`(.*)\*(.*)`)
 | 
				
			||||||
 | 
						if !rempar.Match([]byte(inputname)) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rest := rempar.FindSubmatch([]byte(inputname))
 | 
				
			||||||
 | 
						par1 := string(rest[1])
 | 
				
			||||||
 | 
						par2 := string(rest[2])
 | 
				
			||||||
 | 
						for i := 1; i <= filesum; i++ {
 | 
				
			||||||
 | 
							if !Exists(par1 + strconv.Itoa(i) + par2) {
 | 
				
			||||||
 | 
								return false
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						i := 1
 | 
				
			||||||
 | 
						big := filesum
 | 
				
			||||||
 | 
						res := []byte{}
 | 
				
			||||||
 | 
						for i <= big {
 | 
				
			||||||
 | 
							bfile, _ := ioutil.ReadFile(par1 + strconv.Itoa(i) + par2)
 | 
				
			||||||
 | 
							coder, _ := base64.StdEncoding.DecodeString(string(bfile))
 | 
				
			||||||
 | 
							for _, v := range coder {
 | 
				
			||||||
 | 
								res = append(res, v)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							i++
 | 
				
			||||||
 | 
							//time.Sleep(time.Microsecond * 560)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ioutil.WriteFile(outputname, res, 0755)
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func EncodeFileByBase64(filepath, outputname string, buffer int) bool {
 | 
				
			||||||
 | 
						if !Exists(filepath) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile(`(.*)\*(.*)`)
 | 
				
			||||||
 | 
						if !rempar.Match([]byte(outputname)) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rest := rempar.FindSubmatch([]byte(outputname))
 | 
				
			||||||
 | 
						par1 := string(rest[1])
 | 
				
			||||||
 | 
						par2 := string(rest[2])
 | 
				
			||||||
 | 
						ret := SlitFile(filepath, outputname, 0, int64(buffer), int64(buffer)/10)
 | 
				
			||||||
 | 
						if !ret {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						i := 1
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							if !Exists(par1 + strconv.Itoa(i) + par2) {
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								bfile, _ := ioutil.ReadFile(par1 + strconv.Itoa(i) + par2)
 | 
				
			||||||
 | 
								coder := base64.StdEncoding.EncodeToString(bfile)
 | 
				
			||||||
 | 
								ioutil.WriteFile(par1+strconv.Itoa(i)+par2, []byte(coder), 0755)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							i++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func DecodeFileByBase64(inputname, outputname string, filesum int) bool {
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile(`(.*)\*(.*)`)
 | 
				
			||||||
 | 
						if !rempar.Match([]byte(inputname)) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rest := rempar.FindSubmatch([]byte(inputname))
 | 
				
			||||||
 | 
						par1 := string(rest[1])
 | 
				
			||||||
 | 
						par2 := string(rest[2])
 | 
				
			||||||
 | 
						if filesum != 0 {
 | 
				
			||||||
 | 
							for i := 1; i <= filesum; i++ {
 | 
				
			||||||
 | 
								if !Exists(par1 + strconv.Itoa(i) + par2) {
 | 
				
			||||||
 | 
									return false
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							var i int
 | 
				
			||||||
 | 
							for i = 1; ; i++ {
 | 
				
			||||||
 | 
								if !Exists(par1 + strconv.Itoa(i) + par2) {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							filesum = i - 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						i := 1
 | 
				
			||||||
 | 
						big := filesum
 | 
				
			||||||
 | 
						fpw, _ := os.Create(outputname)
 | 
				
			||||||
 | 
						defer fpw.Close()
 | 
				
			||||||
 | 
						for i <= big {
 | 
				
			||||||
 | 
							bfile, _ := ioutil.ReadFile(par1 + strconv.Itoa(i) + par2)
 | 
				
			||||||
 | 
							coder, _ := base64.StdEncoding.DecodeString(string(bfile))
 | 
				
			||||||
 | 
							fpw.Write(coder)
 | 
				
			||||||
 | 
							i++
 | 
				
			||||||
 | 
							//time.Sleep(time.Microsecond * 560)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SlitFile(filename, outputname string, num int, databig, buffer int64) bool {
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile(`(.*)\*(.*)`)
 | 
				
			||||||
 | 
						if !rempar.Match([]byte(outputname)) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rest := rempar.FindSubmatch([]byte(outputname))
 | 
				
			||||||
 | 
						par1 := string(rest[1])
 | 
				
			||||||
 | 
						par2 := string(rest[2])
 | 
				
			||||||
 | 
						if !Exists(filename) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fileinfo, _ := os.Stat(filename)
 | 
				
			||||||
 | 
						filesize := fileinfo.Size()
 | 
				
			||||||
 | 
						var spbyte int64
 | 
				
			||||||
 | 
						if num != 0 {
 | 
				
			||||||
 | 
							spbyte = filesize / int64(num)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if databig != 0 {
 | 
				
			||||||
 | 
							spbyte = databig
 | 
				
			||||||
 | 
							num = int(filesize/spbyte + 1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if buffer == 0 {
 | 
				
			||||||
 | 
							buffer = spbyte / 10
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if buffer > 100*1024*1024 {
 | 
				
			||||||
 | 
							buffer = 50 * 1024 * 1024
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fp, _ := os.Open(filename)
 | 
				
			||||||
 | 
						defer fp.Close()
 | 
				
			||||||
 | 
						data := make([]byte, buffer)
 | 
				
			||||||
 | 
						var i int64 = 0
 | 
				
			||||||
 | 
						var k int = 1
 | 
				
			||||||
 | 
						fpw, _ := os.Create(par1 + strconv.Itoa(k) + par2)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							data = data[:cap(data)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// read bytes to slice
 | 
				
			||||||
 | 
							n, err := fp.Read(data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if err == io.EOF {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fmt.Println(err)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							i += int64(n)
 | 
				
			||||||
 | 
							data = data[:n]
 | 
				
			||||||
 | 
							fpw.Write(data)
 | 
				
			||||||
 | 
							if i > spbyte && k < num {
 | 
				
			||||||
 | 
								fpw.Close()
 | 
				
			||||||
 | 
								k++
 | 
				
			||||||
 | 
								i = 1
 | 
				
			||||||
 | 
								fpw, _ = os.Create(par1 + strconv.Itoa(k) + par2)
 | 
				
			||||||
 | 
								defer fpw.Close()
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SpliceFile(inputname, outputname string, num int, buffer int64) bool {
 | 
				
			||||||
 | 
						rempar := regexp.MustCompile(`(.*)\*(.*)`)
 | 
				
			||||||
 | 
						if !rempar.Match([]byte(inputname)) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rest := rempar.FindSubmatch([]byte(inputname))
 | 
				
			||||||
 | 
						par1 := string(rest[1])
 | 
				
			||||||
 | 
						par2 := string(rest[2])
 | 
				
			||||||
 | 
						if num != 0 {
 | 
				
			||||||
 | 
							for i := 1; i <= num; i++ {
 | 
				
			||||||
 | 
								if !Exists(par1 + strconv.Itoa(i) + par2) {
 | 
				
			||||||
 | 
									return false
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							var i int
 | 
				
			||||||
 | 
							for i = 1; ; i++ {
 | 
				
			||||||
 | 
								if !Exists(par1 + strconv.Itoa(i) + par2) {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							num = i - 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fpw, _ := os.Create(outputname)
 | 
				
			||||||
 | 
						defer fpw.Close()
 | 
				
			||||||
 | 
						fileinfo, _ := os.Stat(par1 + "1" + par2)
 | 
				
			||||||
 | 
						filesize := fileinfo.Size()
 | 
				
			||||||
 | 
						if buffer == 0 {
 | 
				
			||||||
 | 
							buffer = filesize / 5
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if buffer > 1024*1024*100 {
 | 
				
			||||||
 | 
							buffer = 1024 * 1024 * 100
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						data := make([]byte, buffer)
 | 
				
			||||||
 | 
						for i := 1; i <= num; i++ {
 | 
				
			||||||
 | 
							fp, _ := os.Open(par1 + strconv.Itoa(i) + par2)
 | 
				
			||||||
 | 
							for {
 | 
				
			||||||
 | 
								data = data[:cap(data)]
 | 
				
			||||||
 | 
								// read bytes to slice
 | 
				
			||||||
 | 
								n, err := fp.Read(data)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									if err == io.EOF {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									fmt.Println(err)
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								data = data[:n]
 | 
				
			||||||
 | 
								fpw.Write(data)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fp.Close()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func MixFile(filepath, outputname string, buffer int64, remix bool) bool {
 | 
				
			||||||
 | 
						if !Exists(filepath) || !IsFile(filepath) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fileinfo, _ := os.Stat(filepath)
 | 
				
			||||||
 | 
						filesize := fileinfo.Size()
 | 
				
			||||||
 | 
						if buffer == 0 {
 | 
				
			||||||
 | 
							buffer = filesize / 5
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if buffer > 1024*1024*100 {
 | 
				
			||||||
 | 
							buffer = 1024 * 1024 * 100
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var spbyte int64
 | 
				
			||||||
 | 
						if !remix {
 | 
				
			||||||
 | 
							spbyte = filesize / 2
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							spbyte = filesize - filesize/2
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fpw, _ := os.Create(outputname)
 | 
				
			||||||
 | 
						defer fpw.Close()
 | 
				
			||||||
 | 
						fp, _ := os.Open(filepath)
 | 
				
			||||||
 | 
						defer fp.Close()
 | 
				
			||||||
 | 
						data := make([]byte, buffer)
 | 
				
			||||||
 | 
						_, _ = fp.Seek(spbyte, 0)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							data = data[:cap(data)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// read bytes to slice
 | 
				
			||||||
 | 
							n, err := fp.Read(data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if err == io.EOF {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fmt.Println(err)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							data = data[:n]
 | 
				
			||||||
 | 
							fpw.Write(data)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_, _ = fp.Seek(0, 0)
 | 
				
			||||||
 | 
						i := int64(0)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							data = data[:cap(data)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// read bytes to slice
 | 
				
			||||||
 | 
							n, err := fp.Read(data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if err == io.EOF {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fmt.Println(err)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							i += int64(n)
 | 
				
			||||||
 | 
							if i < spbyte {
 | 
				
			||||||
 | 
								data = data[:n]
 | 
				
			||||||
 | 
								fpw.Write(data)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								data = data[:(int64(n) - i + spbyte)]
 | 
				
			||||||
 | 
								fpw.Write(data)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Md5File(filepath string) string {
 | 
				
			||||||
 | 
						f, err := os.Open(filepath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Open", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer f.Close()
 | 
				
			||||||
 | 
						md5hash := md5.New()
 | 
				
			||||||
 | 
						if _, err := io.Copy(md5hash, f); err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Copy", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := md5hash.Sum(nil)
 | 
				
			||||||
 | 
						return hex.EncodeToString(result)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Crc32File(filepath string) string {
 | 
				
			||||||
 | 
						f, err := os.Open(filepath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Open", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						defer f.Close()
 | 
				
			||||||
 | 
						crchash := crc32.NewIEEE()
 | 
				
			||||||
 | 
						if _, err := io.Copy(crchash, f); err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Copy", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := crchash.Sum(nil)
 | 
				
			||||||
 | 
						return hex.EncodeToString(result)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Sha1File(filepath string) string {
 | 
				
			||||||
 | 
						f, err := os.Open(filepath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Open", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						defer f.Close()
 | 
				
			||||||
 | 
						sha1hash := sha1.New()
 | 
				
			||||||
 | 
						if _, err := io.Copy(sha1hash, f); err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Copy", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := sha1hash.Sum(nil)
 | 
				
			||||||
 | 
						return hex.EncodeToString(result)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Sha256File(filepath string) string {
 | 
				
			||||||
 | 
						f, err := os.Open(filepath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Open", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						defer f.Close()
 | 
				
			||||||
 | 
						sha256hash := sha256.New()
 | 
				
			||||||
 | 
						if _, err := io.Copy(sha256hash, f); err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Copy", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := sha256hash.Sum(nil)
 | 
				
			||||||
 | 
						return hex.EncodeToString(result)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Sha512File(filepath string) string {
 | 
				
			||||||
 | 
						f, err := os.Open(filepath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Open", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						defer f.Close()
 | 
				
			||||||
 | 
						sha512hash := sha512.New()
 | 
				
			||||||
 | 
						if _, err := io.Copy(sha512hash, f); err != nil {
 | 
				
			||||||
 | 
							fmt.Println("Copy", err)
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := sha512hash.Sum(nil)
 | 
				
			||||||
 | 
						return hex.EncodeToString(result)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func RC4File(filepath string, key []byte) string {
 | 
				
			||||||
 | 
						rc4obj, _ := rc4.NewCipher(key)
 | 
				
			||||||
 | 
						plain, _ := ioutil.ReadFile(filepath)
 | 
				
			||||||
 | 
						res := make([]byte, len(plain))
 | 
				
			||||||
 | 
						rc4obj.XORKeyStream(res, plain)
 | 
				
			||||||
 | 
						return hex.EncodeToString(res)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func DetachFile(source, output1, output2 string, key int64) bool {
 | 
				
			||||||
 | 
						if !Exists(source) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fin, _ := os.Stat(source)
 | 
				
			||||||
 | 
						filesize := fin.Size()
 | 
				
			||||||
 | 
						fpw, _ := os.Create(output1)
 | 
				
			||||||
 | 
						fp, _ := os.Open(source)
 | 
				
			||||||
 | 
						defer fp.Close()
 | 
				
			||||||
 | 
						buffer := filesize / 10
 | 
				
			||||||
 | 
						if buffer > 100*1024*1024 {
 | 
				
			||||||
 | 
							buffer = 100 * 1024 * 1024
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						data := make([]byte, buffer)
 | 
				
			||||||
 | 
						i := int64(0)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							data = data[:cap(data)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// read bytes to slice
 | 
				
			||||||
 | 
							n, err := fp.Read(data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if err == io.EOF {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fmt.Println(err)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							i += int64(n)
 | 
				
			||||||
 | 
							if i < key {
 | 
				
			||||||
 | 
								data = data[:n]
 | 
				
			||||||
 | 
								fpw.Write(data)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								data = data[:(int64(n) - i + key)]
 | 
				
			||||||
 | 
								fpw.Write(data)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fpw.Close()
 | 
				
			||||||
 | 
						_, _ = fp.Seek(key+20, 0)
 | 
				
			||||||
 | 
						fpw, _ = os.Create(output2)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							data = data[:cap(data)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// read bytes to slice
 | 
				
			||||||
 | 
							n, err := fp.Read(data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if err == io.EOF {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fmt.Println(err)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							data = data[:n]
 | 
				
			||||||
 | 
							fpw.Write(data)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func AttachFile(source, target, output string) (bool, string) {
 | 
				
			||||||
 | 
						if !Exists(source) {
 | 
				
			||||||
 | 
							return false, ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !Exists(target) {
 | 
				
			||||||
 | 
							return false, ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fin, _ := os.Stat(source)
 | 
				
			||||||
 | 
						filesize := fin.Size()
 | 
				
			||||||
 | 
						_ = ioutil.WriteFile(output+".ini", []byte(strconv.FormatInt(filesize, 10)), 0755)
 | 
				
			||||||
 | 
						fpw, _ := os.Create(output)
 | 
				
			||||||
 | 
						defer fpw.Close()
 | 
				
			||||||
 | 
						fp, _ := os.Open(source)
 | 
				
			||||||
 | 
						buffer := filesize / 10
 | 
				
			||||||
 | 
						if buffer > 100*1024*1024 {
 | 
				
			||||||
 | 
							buffer = 100 * 1024 * 1024
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						data := make([]byte, buffer)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							data = data[:cap(data)]
 | 
				
			||||||
 | 
							// read bytes to slice
 | 
				
			||||||
 | 
							n, err := fp.Read(data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if err == io.EOF {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fmt.Println(err)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							data = data[:n]
 | 
				
			||||||
 | 
							fpw.Write(data)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fp.Close()
 | 
				
			||||||
 | 
						fpw.Write([]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
 | 
				
			||||||
 | 
						fin, _ = os.Stat(target)
 | 
				
			||||||
 | 
						filesize2 := fin.Size()
 | 
				
			||||||
 | 
						fp, _ = os.Open(target)
 | 
				
			||||||
 | 
						buffer = filesize2 / 10
 | 
				
			||||||
 | 
						if buffer > 100*1024*1024 {
 | 
				
			||||||
 | 
							buffer = 100 * 1024 * 1024
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						data = make([]byte, buffer)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							data = data[:cap(data)]
 | 
				
			||||||
 | 
							// read bytes to slice
 | 
				
			||||||
 | 
							n, err := fp.Read(data)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if err == io.EOF {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fmt.Println(err)
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							data = data[:n]
 | 
				
			||||||
 | 
							fpw.Write(data)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fp.Close()
 | 
				
			||||||
 | 
						return true, strconv.FormatInt(filesize, 10)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user