Golang、python中的一个异或加密算法,用来加密字符串。
2019独角兽企业重金招聘Python工程师标准>>>
在Go语言中,有自带的对称或者非对称加密函数,但是有点重量级,用起来也有点麻烦。
一般的游戏设计中,肯定不用Go自带的那些加密库,因为处理速度有点慢,服务器跟不上速度,客户端也跟不上速度。
平时开发中,我在delphi中、易语言中常用这个算法加密,算法是网上抄的:
XorKey可以自定义修改。
delphi代码:
constXorKey: array[0..7] of Byte = ($B2, $09, $BB, $55, $93, $6D, $44, $47); //字符串加密用function Enc(Str: string): string; //字符加密函數 這是用的一個異或加密 vari, j: Integer; beginResult := '';j := 0;for i := 1 to Length(Str) dobeginResult := Result + IntToHex(Byte(Str[i]) xor XorKey[j], 2);j := (j + 1) mod 8;end; end; function Dec(Str: string): string; //字符解密函數 vari, j: Integer; beginResult := '';j := 0;for i := 1 to Length(Str) div 2 dobeginResult := 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) stringdec(src string) string }func (a *Xor) enc(src string) string {var result stringj := 0s := ""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 stringvar s int64j := 0bt := []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@classmethoddef 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)%8return result@classmethoddef dec(self,src):j,result,h=0,"",0h=len(src)for i in range(0,h,2):result=result + chr (int( src[i:i+2],16)^self.XorKey[j])j=(j+1)%8return result a=Xor() print(a.enc("123fsgdg0fd")) print(a.dec("833b8833e00a2020826fdf"))
转载于:https://my.oschina.net/u/248241/blog/862145
Golang、python中的一个异或加密算法,用来加密字符串。相关推荐
- 如何在 Python 中创建一个简单的神经网络
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在过去的几十年里,机器学习对世界产生了巨大的影响,而且它的普 ...
- python if语句多个条件-关于函数:如何在python中为一个if语句提供多个条件
本问题已经有最佳答案,请猛点这里访问. 所以我在用python 3.1.5编写一些代码,这些代码需要有多个条件才能发生某些事情.例子: 1 2 3 4 5def example(arg1, arg2, ...
- c++定义一个动态对象数组_如何在Python中自定义一个可被调用的对象实例?
前言 在关于Python描述符函数的详解三篇中,我们有提到如何基于类创建一个"描述符函数",之所以能够基于类创建这样一个概念,是因为用到了类中的__call__属性,从前述文章中可 ...
- python中2d_【IT专家】如何在Python中复制一个2D数组?(复制)
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 如何在 Python 中复制一个 2D 数组? ( 复制 ) 如何在 Python 中复制一个 2D 数组 ?( 复制 )[ 英 ]How to ...
- python 幂运算 整数_在Python中检查一个数字是否是另一个数字的幂
python 幂运算 整数 To solve this problem simply, we will use the log() function from the math module. The ...
- if函数python_关于函数:如何在python中为一个if语句提供多个条件
本问题已经有最佳答案,请猛点这里访问. 所以我在用python 3.1.5编写一些代码,这些代码需要有多个条件才能发生某些事情.例子: 1 2 3 4 5def example(arg1, arg2, ...
- python中定义类的关键字_在Python中,定义一个类使用什么关键字?
[多选题]技术应用的限制包括 [多选题]关于类和对象,下面说法正确的有? [判断题]温度越高,料液的粘度越小,扩散系数越大,可提高膜通量. [单选题]某企业有10台运货车,已知每台车每运行100小时平 ...
- python并发循环_在Python中模拟一个并发循环?
在Python中模拟一个并发循环? 我需要模拟Python程序中的并发循环.不幸的是,以下简单的代码不起作用:list_of_ints = [ 1, 2, 3 ]iterator = list_of_ ...
- python判断字符串合法,详解Python判定IP地址合法性的三种方法 python中判断一个字符串是否是IP地址...
html 中 鼠标放在标签上会显示小手状,其它标签在其他标签上,美工给加了一些样式,鼠标放上去也显示小手状.有哪位大手状样式 有什么不懂的前端问题可以去菜鸟驿站.全都是泡沫,只一刹的花火,所谓的友情, ...
- 在python中创建一个具有特定大小的空列表
本文翻译自:Create an empty list in python with certain size I want to create an empty list (or whatever i ...
最新文章
- 1.21 方法的可变参数(String...names)
- Android的Gson的使用方法,实现Json结构间相互转换
- 阿里张磊:云计算生态价值点正迅速聚焦到“应用”上
- 自定义水波纹效果,可设置波纹条数和波纹颜色,使用简单
- 2015蓝桥杯省赛---java---A---9(垒筛子)
- Linux load函数,kexec_load()函数 Unix/Linux
- redis 的mq功能演示
- MySQL如何访问Postgres
- zabbix使用ICMP ping监控网络状态
- LeetCode 73. Set Matrix Zeroes
- Python进阶(十)多进程multiprocessing和subprocess模块
- android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
- ceph osd 磁盘损坏处理
- 带你Dart带你Diao之类(一)
- 青龙面板安装搭建详细教程
- python-直接删除整个文件夹
- Uber vs. Lyft
- GO项目打包部署操作
- 环信群列表 php,一行代码实现群聊头像(用环信仿微信群聊头像)
- iOS 拦截系统自带的Pop事件
热门文章
- matlab 流水灯,Matlab生成stm32代码
- c++ sort排序函数
- 《Python语言程序设计》二级教程课后编程题及答案
- C语言水仙花数和总数,C语言与水仙花数
- java对象中方法的存储原理_垃圾收集机制的基本原理及方法
- This iPhone 6s is running iOS 11.3.1 (15E302), which may not be supported by this version of Xcode.
- jquery字符串转json
- 10 Linux之yum源码安装
- Hadoop简介(1)
- java 关于时间处理