我正在寻找一种加密/混淆30位数字的方法。在
结果将被分成3组,用户可以看到一个6个字符的字母数字,用base32字母编码,但是用户不能在alphanumeric字符串中找到模式。例如,用户可以看到3个字符串:ASDFGH、LKJHGF、ZXCVBN,这些字符串可能映射到数字1073741821、1073741822、1073741823。但是,这是一个他们不应该轻易弄明白的模式。在
我看过一些加密算法,比如DES。这是一个糟糕而天真的尝试:import struct
from Crypto.Cipher import DES
from .baseconv import base32_urlsafe
_KEY = '\x81\x98\xe1\x14
_encryptor = DES.new(_KEY)
def encrypt_number(number):
encrypted_i64 = struct.unpack(
'!Q', _encryptor.encrypt(struct.pack('!Q', number))
)[0]
encrypted_i30 = encrypted_i64 >> 34
return base32_urlsafe.encode(encrypted_i30)
但是很明显,如果需要的话,我将无法解密字符串,并且这种方法会丢失唯一性。另外还讨论了使用异或,但这太可预测了,因为更多的情况下不是数字将在一个连续的序列中。在
我从来没必要这样编码过。所以,我正在寻找一些加密算法/方法来研究和考虑。我使用的是python,但是欢迎使用其他语言的想法或示例。在