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