如果您只是想使用上面使用的符號集(0-9A-Z)「存儲」一些信息,那麼可以使用下面的算法。代碼是我的一箇舊的Python(3)程序。這絕對不是什麼花哨的東西,也沒有很好的測試,但是我認爲這比沒有好,因爲你還沒有很多答案。將代碼移植到PHP或AS應該很容易。例如,可以用命令式樣式循環代替reduce語句。另請注意,//
表示Python中的整數除法。
它也應該很容易掌握一些壓縮/加密到它。希望它類似於你想要的。開始。
from functools import reduce
class Coder:
def __init__(self, alphabet=None, groups=4):
if not alphabet:
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
self.alphabet = alphabet
self.groups = groups
def encode(self, txt):
N = len(self.alphabet)
num = reduce(lambda x,y: (x*256)+y, map(ord, txt))
# encode to alphabet
a = []
while num > 0:
i = num % N
a.append(self.alphabet[i])
num -= i
num = num//N
c = "".join(a)
if self.groups > 0:
# right zero pad
while len(c) % self.groups != 0:
c = c + self.alphabet[0]
# make groups
return '-'.join([c[x*self.groups:(x+1)*self.groups]
for x in range(len(c)//self.groups)])
return c
def decode(self, txt, separator='-'):
# remove padding zeros and separators
x = txt.rstrip(self.alphabet[0])
if separator != None:
x = x.replace(separator, '')
N = len(self.alphabet)
x = [self.alphabet.find(c) for c in x]
x.reverse()
num = reduce(lambda x,y: (x*N)+y, x)
a = []
while num > 0:
i = num % 256
a.append(i)
num -= i
num = num//256
a.reverse()
return ''.join(map(chr, a))
if __name__ == "__main__":
k = Coder()
s = "Hello world!"
e = k.encode(s)
print("Encoded:", e)
d = k.decode(e)
print("Decoded:", d)
輸出示例:
Encoded: D1RD-YU0C-5NVG-5XL8-7620
Decoded: Hello world!
嗯,這不是那麼容易,你需要擁有屬於該序列所有者的特定數據,以使它們獨一無二 – RobertPitt
需要將多少數據字節存儲到「密鑰」中? – hakre
@RobertPitt。是的,當然,鑰匙必須是獨一無二的。 – Astraport