在python中混淆值

用户

假设我有以下字符串

a = "123456"
b = "#$%[{\"
c = "ABCDEFG"

我需要将这三个字符串转换为具有以下属性的“d”字符串

  • “d”字符串是模糊的(不需要加密)
  • “d”串可以转换成a、b、c串(可逆)
  • “d”字符串的计算速度应该很快
  • “d”字串应尽可能短

到目前为止我所做的就是这样

^{pr2}$

到目前为止,这已经完成了前三个需求,但不能满足第三个需求,因为base64往往会使字符串变得非常大。在

我也在寻找其他解决方案

  • 使用异或加密
  • 考虑使用CRC32,因为有些问题(Reversing CRC32)声明可能会还原它,但是,我不确定。在

最后请注意,“模糊处理”部分由python完成,“恢复”部分由php完成。在

有什么想法吗?在


已被浏览了3332次
更新日期: 2020-10-26 06:23:11
2 个回答
fefe Tyson

如果字符串比示例稍长,则^{} module可能很适合:

>>> import zlib
>>> zlib.compress("123456789123456789")
'x\x9c3426153\xb7\xb04\x841\x00#\x01\x03\xbb'
>>> zlib.decompress(_)
'123456789123456789'

但是,由于格式的开销,短字符串往往会变长:

^{pr2}$

解压可以用PHP的^{}完成。在

评论 - 2020年9月11日 20:34
fefe Tyson

你可以做一个简单的Caesar Cypher

from string import printable as alphabet 
import string

def caesar(plaintext, shift):
    shifted_alphabet = alphabet[shift:] + alphabet[:shift]
    table = string.maketrans(alphabet, shifted_alphabet)
    return plaintext.translate(table)

shift=3
for s in ("123456","#$%[{\\","ABCDEFG"):
    coded=caesar(s,shift)
    print s
    print coded
    print caesar(coded,-shift)
    print 

印刷品:

^{pr2}$

根据定义,字符串不会变长或变短。我已经修改了代码来处理您的示例。在

评论 - 2020年9月11日 20:34

最新Python问答

推荐Python问答