易语言PHP非对称加密,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, 0x09, 0xBB, 0x55, 0x93, 0x6D, 0x44, 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,src):

j,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"))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值