|
@@ -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)
|