张金坤 8 rokov pred
rodič
commit
aac1f2a6d2

+ 18 - 0
common/src/qfw/util/common.go

@@ -25,6 +25,7 @@ const (
 )
 
 var SE = &SimpleEncrypt{Key: "topnet2015topnet2015"}
+var SE2 = &SimpleEncrypt{Key: "2017jianyu"}
 
 //短地址加密
 func EncodeArticleId(keys ...string) string {
@@ -37,6 +38,23 @@ func DecodeArticleId(id string) []string {
 	return strings.Split(SE.DecodeString(id), ",")
 }
 
+//短地址加密,二次加密带校验和
+func EncodeArticleId2ByCheck(keys ...string) string {
+	kstr := strings.Join(keys, ",")
+	kstr = SE.EncodeStringByCheck(kstr)
+	return "ABC" + SE2.EncodeStringByCheck(kstr)
+}
+
+//短地址解密,二次解密带校验和
+func DecodeArticleId2ByCheck(id string) []string {
+	if id[:3] == "ABC" { //前三位为ABC是新加密数据
+		kstr := SE2.DecodeStringByCheck(id[3:])
+		return strings.Split(SE.DecodeStringByCheck(kstr), ",")
+	} else { //历史数据
+		return DecodeArticleId(id)
+	}
+}
+
 func Uuid(length int) string {
 	ret := []string{}
 	for i := 0; i < length; i++ {

+ 55 - 19
common/src/qfw/util/simpleencrypt.go

@@ -1,11 +1,11 @@
 package util
 
 import (
+	"bytes"
 	"encoding/base64"
 	"encoding/hex"
-	"bytes"
-	"log"
 )
+
 /**
 加解密
 	数据结构
@@ -15,25 +15,35 @@ import (
 type SimpleEncrypt struct {
 	Key string //加解密用到的key(加密key索引)+
 }
+
 //计算检验和
-func (s *SimpleEncrypt)calaCheckCode(src []byte) []byte {
+func (s *SimpleEncrypt) calaCheckCode(src []byte) []byte {
 	check := 0
 	for i := 0; i < len(src); i++ {
 		check += int(src[i])
 	}
 	return []byte{byte((check >> 8) & 0xff), byte(check & 0xff)}
 }
+
 //验证数据有效性
-func (s *SimpleEncrypt)verify(src []byte)bool{
-	v:=s.calaCheckCode(src[:len(src)-2])
-	return bytes.Equal(v,src[len(src)-2:])
+func (s *SimpleEncrypt) verify(src []byte) bool {
+	v := s.calaCheckCode(src[:len(src)-2])
+	return bytes.Equal(v, src[len(src)-2:])
 }
+
 //加密String
 func (s *SimpleEncrypt) EncodeString(str string) string {
 	data := []byte(str)
 	s.doEncode(data)
-	v:=s.calaCheckCode(data)
-	data=append(data,v...)
+	return base64.StdEncoding.EncodeToString(data)
+}
+
+//加密String,ByCheck
+func (s *SimpleEncrypt) EncodeStringByCheck(str string) string {
+	data := []byte(str)
+	s.doEncode(data)
+	v := s.calaCheckCode(data)
+	data = append(data, v...)
 	return base64.StdEncoding.EncodeToString(data)
 }
 
@@ -41,18 +51,30 @@ func (s *SimpleEncrypt) EncodeString(str string) string {
 func (s *SimpleEncrypt) Encode2Hex(str string) string {
 	data := []byte(str)
 	s.doEncode(data)
-	v:=s.calaCheckCode(data)
-	data=append(data,v...)
+	return hex.EncodeToString(data)
+}
+func (s *SimpleEncrypt) Encode2HexByCheck(str string) string {
+	data := []byte(str)
+	s.doEncode(data)
+	v := s.calaCheckCode(data)
+	data = append(data, v...)
 	return hex.EncodeToString(data)
 }
 
 //解密String
 func (s *SimpleEncrypt) DecodeString(str string) string {
 	data, _ := base64.StdEncoding.DecodeString(str)
-	if len(data)<2 || !s.verify(data){
+	s.doEncode(data)
+	return string(data)
+}
+
+//解密String,ByCheck
+func (s *SimpleEncrypt) DecodeStringByCheck(str string) string {
+	data, _ := base64.StdEncoding.DecodeString(str)
+	if len(data) < 2 || !s.verify(data) {
 		return ""
 	}
-	data=data[:len(data)-2]
+	data = data[:len(data)-2]
 	s.doEncode(data)
 	return string(data)
 }
@@ -60,10 +82,15 @@ func (s *SimpleEncrypt) DecodeString(str string) string {
 //
 func (s *SimpleEncrypt) Decode4Hex(str string) string {
 	data, _ := hex.DecodeString(str)
-	if len(data)<2 || !s.verify(data){
+	s.doEncode(data)
+	return string(data)
+}
+func (s *SimpleEncrypt) Decode4HexByCheck(str string) string {
+	data, _ := hex.DecodeString(str)
+	if len(data) < 2 || !s.verify(data) {
 		return ""
 	}
-	data=data[:len(data)-2]
+	data = data[:len(data)-2]
 	s.doEncode(data)
 	return string(data)
 }
@@ -71,15 +98,24 @@ func (s *SimpleEncrypt) Decode4Hex(str string) string {
 //加密
 func (s *SimpleEncrypt) Encode(data []byte) {
 	s.doEncode(data)
-	v:=s.calaCheckCode(data)
-	data=append(data,v...)
-	log.Println("校验:",v)
+
+}
+
+func (s *SimpleEncrypt) EncodeByCheck(data []byte) {
+	s.doEncode(data)
+	v := s.calaCheckCode(data)
+	data = append(data, v...)
 }
 
 //解密
 func (s *SimpleEncrypt) Decode(data []byte) {
-	if len(data)<2 || !s.verify(data){
-		data=[]byte{}
+	s.doEncode(data)
+}
+
+//解密
+func (s *SimpleEncrypt) DecodeByCheck(data []byte) {
+	if len(data) < 2 || !s.verify(data) {
+		data = []byte{}
 		return
 	}
 	s.doEncode(data)