Golang、python中的一个异或加密算法,用来加密字符串。

前端之家收集整理的这篇文章主要介绍了Golang、python中的一个异或加密算法,用来加密字符串。前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在Go语言中,有自带的对称或者非对称加密函数,但是有点重量级,用起来也有点麻烦。

一般的游戏设计中,肯定不用Go自带的那些加密库,因为处理速度有点慢,服务器跟不上速度,客户端也跟不上速度。

平时开发中,我在delphi中、易语言中常用这个算法加密,算法是网上抄的:

XorKey可以自定义修改

delphi代码

const
   XorKey: array[0..7] of Byte = ($B2,$09,$BB,$55,$93,$6D,$44,$47); //字符串加密用

function Enc(Str: string): string; //字符加密函數  這是用的一個異或加密
var
   i,j: Integer;
begin
   Result := '';
   j := 0;
   for i := 1 to Length(Str) do
   begin
      Result := Result + IntToHex(Byte(Str[i]) xor XorKey[j],2);
      j := (j + 1) mod 8;
   end;
end;             

function Dec(Str: string): string; //字符解密函數
var
   i,j: Integer;
begin
   Result := '';
   j := 0;
   for i := 1 to Length(Str) div 2 do
   begin
      Result := Result + Char(StrToInt('$' + Copy(Str,i * 2 - 1,2)) xor XorKey[j]);
      j := (j + 1) mod 8;
   end;
end;

用Go语言改写后,是这样的,大家其实可以自己优化下。

var XorKey []byte = []byte{0xB2,0x09,0xBB,0x55,0x93,0x6D,0x44,0x47}

type Xor struct {
}
type m interface {
   enc(src string) string
   dec(src string) string
}

func (a *Xor) enc(src string) string {
   var result string
   j := 0
   s := ""
   bt := []rune(src)
   for i := 0; i < len(bt); i++ {
      s = strconv.FormatInt(int64(byte(bt[i])^XorKey[j]),16)
      if len(s) == 1 {
         s = "0" + s
      }
      result = result + (s)
      j = (j + 1) % 8
   }
   return result
}

func (a *Xor) dec(src string) string {
   var result string
   var s int64
   j := 0
   bt := []rune(src)
   fmt.Println(bt)
   for i := 0; i < len(src)/2; i++ {
      s,_ = strconv.ParseInt(string(bt[i*2:i*2+2]),16,0)
      result = result + string(byte(s)^XorKey[j])
      j = (j + 1) % 8
   }
   return result
}
func main() {
   xor := Xor{}
   fmt.Println(xor.enc("123fsgdg0fd"))
   fmt.Println(xor.dec("833b8833e00a2020826fdf"))
}

python中,可以这样来写。

class Xor:
    XorKey=[0xB2,0x47]
    def __init__(self):
        pass
    @classmethod
    def enc(self,src):
        j,result=0,""
        bt=bytes(src,'ascii')
        h=len(bt)
        for i in range(h):
           result=result+hex(bt[i]^(self.XorKey[j]))[2:]
           j=(j+1)%8
        return result
    @classmethod
    def dec(self,result,h=0,"",0
        h=len(src)
        for i in range(0,h,2):
           result=result + chr (int( src[i:i+2],16)^self.XorKey[j])
           j=(j+1)%8
        return result
a=Xor()
print(a.enc("123fsgdg0fd"))
print(a.dec("833b8833e00a2020826fdf"))

猜你在找的Go相关文章