Golang 解密算法

李鹏0 615 次浏览

这个算法是针对之前 PHP 加密算法(可逆) 中的算法得来的,是使用 Go 语言去解密 PHP 加密的内容。

 

 

package main


import (
	"crypto/md5"
	"encoding/base64"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"log"
)
func main() {
	token := "token======";

	data, err := Decrypt(token, "key=====")
	log.Println(data, err)
	
}
func Md5(key string) string {
	h := md5.New()
	io.WriteString(h, key)
	key = fmt.Sprintf("%x", h.Sum(nil))
	return key
}

func Base64Decode(str string) string {
	data, _ := base64.StdEncoding.DecodeString(str)
	return string(data)
}
func Decrypt(data string, key string) (map[string]interface{}, error) {
	key = Md5(key)

	var (
		char = ""
		str  = ""
		x    = 0
		l    = len(key)
	)
	data = Base64Decode(data)
	lenths := len(data)

	for i := 0; i < lenths; i++ {
		if x == l {
			x = 0
		}
		char = char + fmt.Sprintf("%s", key[x:x+1])
		x++
	}

	for i := 0; i < lenths; i++ {
		if data[i : i+1][0] < char[i : i+1][0] {
			str = str + string(char[i : i+1][0]-data[i : i+1][0])
		} else {
			str = str + string((data[i : i+1][0])-(char[i : i+1][0]))
		}
	}
	var newData map[string]interface{}
	if err := json.Unmarshal([]byte(str), &newData); err != nil {
		log.Println("解析失败")
		return newData, errors.New("解析失败")
	}

	return newData, nil

}




发表评论

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen