📄 randmi.py
字号:
# -*- coding: cp936 -*-
class Rand:
def __init__(self, x=None):
self.SS=256
self.seed(x)
def seed(self,x=None):
if x==None:x=[112345678,234315173,413123456]
self.x,self.y,self.z=x
import zlib
self.first= zlib.crc32(str(x[0])+str(x[1])+str(x[2]))%self.SS
def rand(self):
t=int('100000000',16)
self.x,self.y=self.y,((self.x+self.y)^self.z)%t
return self.y
def ranseq(self):
t=[]
while len(t)!=self.SS:
k=0
while len(t)!=self.SS:
k+=1
if k>self.SS*3:break
m=self.rand()
if m not in t:
t+=[m]
self.x+=3
return t
def ranseqs(self):
t=range(self.SS)
k=[]
m=[]
for i in t:
z=self.ranseq()
bb=sorted(zip(t,z),cmp=lambda x,y: cmp(x[1], y[1]))
tn=[i[0] for i in bb]
k+=[tn]
mm=[1]*self.SS
for j in t:
mm[tn[j]]=j
m+=[mm]
self.arry=k[:]
self.arry1=m[:]
self.test()
def test(self):
import random
tt=range(self.SS)
t=tt[:]
random.shuffle(t)
dt=t[:]
dd=[1]*self.SS
dg=dd[:]
m=123
for i in tt:
dd[i]=self.arry[m][dt[i]]
m=dd[i]
m=123
for i in tt:
dg[i]=self.arry1[m][dd[i]]
m=dd[i]
assert dg==dt,"数组无效"
def encode(self,s1,s2):
t=self.first
f1=open(s1,"rb")
f2=open(s2,"wb")
a1=f1.read()
m=''
for i in list(a1):
t=s.arry[t][ord(i)]
m+=chr(t)
f2.write(m)
f1.close()
f2.close()
def decode(self,s1,s2):
t=self.first
f1=open(s1,"rb")
f2=open(s2,"wb")
a1=f1.read()
m=''
for i in list(a1):
n=ord(i)
t=s.arry1[t][n]
m+=chr(t)
t=n
f2.write(m)
f1.close()
f2.close()
if __name__ == '__main__':
s=Rand()
s.ranseqs()
s.encode(r'/home/stsee/1','123')
s.decode('123','21')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -