小编d3w*_*4rd的帖子

将30位数加密为6个字符的字母数字字符串

我正在寻找一种加密/混淆30位数字的方法.

结果将被分组为3组,并且对用户可见,作为使用base32字母编码的6个字符的字母数字,但用户不应该能够在字母数字字符串中拾取模式.例如,用户可以看到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<\xb3\xe8\x10'
_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)
Run Code Online (Sandbox Code Playgroud)

但显然,如果需要,我将无法解密字符串,并且这种方法会丢失唯一性.还考虑了使用XOR,但这是太可预测的,因为更常见的是数字不是连续的序列.

我从来没有编过这样的东西.所以,我正在寻找一些加密算法/方法来研究和考虑.我正在使用python,但欢迎使用其他语言的想法或示例.

python security encryption cryptography bit-manipulation

2
推荐指数
1
解决办法
1270
查看次数