123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package utils
- // import (
- // "crypto/aes"
- // "crypto/cipher"
- // "crypto/md5"
- // "crypto/rand"
- // "crypto/sha1"
- // "encoding/base64"
- // "errors"
- // "fmt"
- // "io"
- // "strconv"
- // "strings"
- // "github.com/shirou/gopsutil/disk"
- // "github.com/shirou/gopsutil/net"
- // )
- // // 字符串生成md5
- // func CreatMD5(s string) string {
- // data := []byte(s)
- // has := md5.Sum(data)
- // return fmt.Sprintf("%x", has)
- // }
- // func GetDiskId() string {
- // partitions, err := disk.Partitions(false)
- // if err != nil {
- // return ""
- // }
- // return disk.GetDiskSerialNumber(partitions[0].Device)
- // }
- // // 获取物理网卡mac地址
- // func GetRealMacAddr() string {
- // netInterfaces, err := net.Interfaces()
- // if err != nil {
- // return ""
- // }
- // loindex := 0
- // for _, netInterface := range netInterfaces {
- // if netInterface.Name == "lo" {
- // loindex = netInterface.Index
- // break
- // }
- // }
- // if len(netInterfaces) < loindex+1 {
- // return ""
- // }
- // fmt.Println(netInterfaces[loindex].HardwareAddr)
- // return netInterfaces[loindex].HardwareAddr
- // }
- // func GetDeviceId() string {
- // // deviceId := fmt.Sprintf("%s:%s", GetRealMacAddr(), GetDiskId())
- // deviceId := GetRealMacAddr()
- // fmt.Println(deviceId)
- // return CreatMD5(deviceId)
- // }
- // // sha1()方法,返回的是byte转换的字符串,如果需要转成16进制,可以使用hex.EncodeToString
- // func GetSha1(str string) string {
- // h := sha1.New()
- // io.WriteString(h, str)
- // return string(h.Sum(nil))
- // }
- // // 右边补全字符串实现方法,主要实现php的str_pad()方法
- // func StrPadRight(input string, padLength int, padString string) string {
- // output := ""
- // inputLen := len(input)
- // if inputLen >= padLength {
- // return input
- // }
- // ll := padLength - inputLen
- // for i := 1; i <= ll; i = i + len(padString) {
- // output += padString
- // }
- // return input + output
- // }
- // // 生成密钥
- // func GenSecretKey(appId string, appSecret string) (secretKey string) {
- // key := appId + "&" + appSecret
- // sha1_str := GetSha1(key)
- // str10 := "0"
- // pack64, _ := strconv.ParseUint(str10, 10, 32)
- // fmt.Println(pack64)
- // pack32 := uint32(pack64)
- // str_pad := StrPadRight(sha1_str, 32, string(rune(pack32)))
- // secretKey = base64.StdEncoding.EncodeToString([]byte(str_pad))
- // return secretKey
- // }
- // // 解密
- // func GetCallbackData(secretKey string, encryptData string) (result_str string, err error) {
- // decodeSecretKeyByte, _ := base64.StdEncoding.DecodeString(secretKey)
- // decodeSecretKey := string(decodeSecretKeyByte)
- // orderSuccessPayInfoByte, err2 := DecodeAesGcm(encryptData, decodeSecretKey, "")
- // result_str = string(orderSuccessPayInfoByte)
- // if err2 != nil {
- // return result_str, errors.New("decode error")
- // }
- // return result_str, err
- // }
- // // 加密
- // func SetCallbackData(secretKey string, data string) (result_str string, err error) {
- // decodeSecretKeyByte, _ := base64.StdEncoding.DecodeString(secretKey)
- // decodeSecretKey := string(decodeSecretKeyByte)
- // orderSuccessPayInfoByte, err2 := EncodeAesGcm(data, decodeSecretKey, "")
- // result_str = string(orderSuccessPayInfoByte)
- // if err2 != nil {
- // return result_str, errors.New("encode error")
- // }
- // return result_str, err
- // }
- // // url安全模式decode字符串
- // func UrlSafeB64decode(str string) (result []byte) {
- // str = strings.Replace(str, "-", "+", -1)
- // str = strings.Replace(str, "_", "/", -1)
- // mod4 := len(str) % 4
- // if mod4 != 0 {
- // str = str + "===="[0:mod4]
- // }
- // result, _ = base64.StdEncoding.DecodeString(str)
- // return result
- // }
- // // base64字符串,替换转换为安全模式
- // func UrlSafeB64encode(str string) (result string) {
- // str = strings.Replace(str, "+", "-", -1)
- // str = strings.Replace(str, "/", "_", -1)
- // return str
- // }
- // // 使用aes-256-gcm方式解密字符串
- // func DecodeAesGcm(encryptData string, hex_key string, hex_add string) ([]byte, error) {
- // tagSize := 16 //nonceSize,tag的长度,用于open时候生成tag,默认12
- // key := []byte(hex_key)
- // add := []byte(hex_add)
- // block, err := aes.NewCipher(key) //生成加解密用的block
- // if err != nil {
- // return []byte(""), err
- // }
- // //根据不同加密算法,也有不同tag长度的方法设定和调用,比如NewGCMWithTagSize、newGCMWithNonceAndTagSize
- // aesgcm, err := cipher.NewGCMWithNonceSize(block, tagSize)
- // if err != nil {
- // return []byte(""), err
- // }
- // decodeEncryptStr := UrlSafeB64decode(encryptData)
- // ciphertext := decodeEncryptStr
- // if len(ciphertext) <= aesgcm.NonceSize() { // 长度应该>iv
- // return []byte(""), errors.New("string: too short") //解密失败
- // }
- // iv := ciphertext[:aesgcm.NonceSize()] //分离出IV
- // ciphertext = ciphertext[aesgcm.NonceSize():] // 密文,tag是调用open方法时候通过密文和前面new时候传的size来进行截取的
- // plaintext, err := aesgcm.Open(nil, iv, ciphertext, add)
- // return plaintext, err
- // }
- // // 使用aes-256-gcm加密数据
- // func EncodeAesGcm(data string, hex_key string, hex_add string) (result string, error error) {
- // tagSize := 16 //nonceSize,tag的长度,用于open时候生成tag,默认12
- // key := []byte(hex_key)
- // add := []byte(hex_add)
- // block, err := aes.NewCipher(key) //生成加解密用的block
- // if err != nil {
- // return result, err
- // }
- // //根据不同加密算法,也有不同tag长度的方法设定和调用,比如NewGCMWithTagSize、newGCMWithNonceAndTagSize
- // aesgcm, err := cipher.NewGCMWithNonceSize(block, tagSize)
- // if err != nil {
- // return result, err
- // }
- // plaintext := []byte(data)
- // iv := make([]byte, tagSize) // NonceSize=12
- // rand.Read(iv) //获取随机值
- // ciphertext := aesgcm.Seal(iv, iv, plaintext, add) //加密,密文为:iv+密文+tag
- // result = base64.StdEncoding.EncodeToString(ciphertext)
- // result = UrlSafeB64encode(result)
- // return result, nil // 生成的BS64
- // }
|