分享
  1. 首页
  2. 文章

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

大洋的顶端 · · 2823 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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

在delphi中和易语言中我经常用这个算法加密,算法是网上抄的:

XorKey可以自己自定义修改。

delphi代码:

const
 XorKey: array[0..7] of Byte = ($B2, 09,ドル $BB, 55,ドル 93,ドル 6ドルD, 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"))

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2823 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏