代码之家  ›  专栏  ›  技术社区  ›  Marplesoft

有没有一种加密技术可以把一个8位数的数字变成10、11位数或更少的数字?

  •  2
  • Marplesoft  · 技术社区  · 16 年前

    我见过的许多加密技术都可以很容易地加密一个简单的8位数字,如“12345678”,但结果通常是类似“8745b34097af8bc9de087e98deb8707aac8797d097f”(编造出来的,但你明白了)。

    有没有办法加密这个8位数字,但得到的加密值是相同的,或至少只是一个稍长的数字?一个理想的目标是最终得到一个10位数或更少的数字。在仍然保持相当强的加密的情况下,这是可能的吗?

    2 回复  |  直到 16 年前
        1
  •  4
  •   Jerry Coffin    16 年前

    这里的很多内容将取决于你的“公钥加密”标签的重要性。你真的想要公钥加密,还是仅仅考虑到了这种可能性?

    如果您愿意使用对称加密,那么从8字节的输入中生成8字节的输出就相当容易了:只需在ECB(电子码本)模式下运行3DES,您就会得到这样的结果。ECB的主要缺点是,给定的输入总是会产生相同的结果,因此如果您的输入可能重复,攻击者将能够看到这种重复,并且可能能够注意到“加密值X导致操作Y”的模式,即使他们根本不能/不破坏加密本身。如果你能接受,3DES/ECB可能是你的答案。

    如果你不能接受这种情况,那么CFB模式下的3DES可能是下一个最好的。这将从8字节的输入中产生16字节的输出(请注意,它通常不会将输入大小增加一倍,而是将输入大小增加8字节)。

    3DES并不是任何人都会称之为最先进的算法,但我认为它仍然可以称得上是“相当强的加密”。作为一个算法,它的弱点部分源于它相对较小的块大小,但这也使输出的扩展最小化。

        2
  •  2
  •   AndiDog    16 年前

    你可以找一个1:1加密字节的流密码。输入N字节时,有N字节加密/解密输出。这类密码通常基于一种创建随机数流的算法,加密密钥/IV充当种子。

    对于一些流密码,请查看 eSTREAM candidates . 例如,我不知道有任何针对HC-128和HC-256的相关攻击。

    推荐文章