【问题标题】:Obfuscating Strings with ASCII and base 128使用 ASCII 和 base 128 混淆字符串
【发布时间】:2011-01-03 21:37:52
【问题描述】:

假设一个字符串是一个数字系统,其中每个事物,它可以是一个 char、DEL 或任何 ASCII 事物,根据这个 ASCII table 有一个对应的数字。如何在 Python 中将属性的任意字符串转换为数字?

一个例子

#car = 35*128**3+99*128**2+97*128**1+114*128**0=75034866

【问题讨论】:

  • 你从哪里得到这些数字?
  • Falmari:从 CHR -column 到 DEC,也许更简单的方法
  • 将此称为“加密”具有严重的误导性。
  • @HH:加密通常涉及某种密钥。您可以暂时将其称为“混淆”,但我想说这只是一种简单的编码形式(不是加密)。
  • @overstood:不,这是不正确的。您假设使用混淆的每个人都认为这是一种完美的安全机制,这很愚蠢。混淆是许多现实世界安全系统的一个有意义的组件,并且通常在充分了解其局限性的情况下能够胜任地实施。在没有充分了解其局限性的情况下实施任何安全机制会导致错误的安全感。

标签: python encoding obfuscation ascii


【解决方案1】:

试试这个:

total = 0
for c in "#car":
    total <<= 7
    total += ord(c)
print total

结果:

75034866

要取回原始字符串:

result = []
while total:
    result.append(chr(total % 128))
    total >>= 7
print ''.join(reversed(result))

结果:

#车

【讨论】:

  • 很好,对于 base128 的特殊情况
【解决方案2】:

对于任意长的数字,在 Python 2.x 中使用 Decimal,在 Python 3.x 中只使用 int。

不知道“加密”。

【讨论】:

  • Python 整数会自动提升为 Python 长整数。 Python long 是任意精度。
【解决方案3】:

您正在寻找一种映射来混淆数据。

真正的加密需要使用陷门函数——一种在计算上很容易以一种方式计算的函数,但如果没有特定信息,则很难计算出它的逆函数。

大多数加密基于素数分解。 Alice 将两个大素数相乘,并将结果提供给 Bob。 Bob 使用这个大素数使用加密函数来加密他的数据。求 Bob 加密函数的逆函数需要知道两个原始素数(加密不需要)。查找这些数字是一项计算量非常大的任务,因此加密数据是“安全的”。

正确实现这一点非常困难。如果您想保证数据的安全,请找一个可以为您做这件事的库。

编辑:我应该指定我所描述的是公钥加密。私钥加密的工作方式略有不同。重要的是,如果没有密钥或某种形式,加密数据将难以解密是有数学基础的。

【讨论】:

  • overstood:如果每周给您任意十个字符的 ASCII 密码并且您不想将它们放在纸上,而是使用某种加密和密钥,您会建议哪个库?
  • 我可能会查看freenet.org.nz/ezPyCrypto 编辑:我刚刚意识到它不支持 AES 或 Blowfish,这可能是您想要使用的。我很快就会再发一篇。
  • 这是一篇关于使用 PyCrypto 实现基于密码的 AES 加密的精彩博文:eli.thegreenplace.net/2010/06/25/…
  • 一次性密码本不符合您对真正加密的定义,但它肯定是真正加密!
  • @gnibbler 一次性密码本仍然依赖密钥进行加密和解密。除此之外,我的观点是,认为很难(或不可能)解密是有数学基础的。
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2013-11-28
  • 1970-01-01
相关资源
最近更新 更多