123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package spider_com
- import (
- "bytes"
- "encoding/base64"
- "encoding/hex"
- )
- /**
- 加解密
- 数据结构
- 密文+sha32校验
- */
- //
- type SimpleEncrypt struct {
- Key string //加解密用到的key(加密key索引)+
- }
- // 计算检验和
- 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:])
- }
- // 加密String
- func (s *SimpleEncrypt) EncodeString(str string) string {
- data := []byte(str)
- s.doEncode(data)
- 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)
- }
- func (s *SimpleEncrypt) Encode2Hex(str string) string {
- data := []byte(str)
- s.doEncode(data)
- 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)
- 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]
- s.doEncode(data)
- return string(data)
- }
- func (s *SimpleEncrypt) Decode4Hex(str string) string {
- data, _ := hex.DecodeString(str)
- 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]
- s.doEncode(data)
- return string(data)
- }
- // 加密
- func (s *SimpleEncrypt) Encode(data []byte) {
- s.doEncode(data)
- }
- func (s *SimpleEncrypt) EncodeByCheck(data []byte) {
- s.doEncode(data)
- v := s.calaCheckCode(data)
- data = append(data, v...)
- }
- // 解密
- func (s *SimpleEncrypt) Decode(data []byte) {
- s.doEncode(data)
- }
- // 解密
- func (s *SimpleEncrypt) DecodeByCheck(data []byte) {
- if len(data) < 2 || !s.verify(data) {
- data = []byte{}
- return
- }
- s.doEncode(data)
- }
- func (s *SimpleEncrypt) doEncode(bs []byte) {
- tmp := []byte(s.Key)
- THEFOR:
- for i := 0; i < len(bs); {
- for j := 0; j < len(tmp); j, i = j+1, i+1 {
- if i >= len(bs) {
- break THEFOR
- }
- bs[i] = bs[i] ^ tmp[j]
- }
- }
- }
|