如何从250个字符和一个16字节密钥生成一个小的加密输出(大约16字节)?

时间:2017-11-23 13:12:16

标签: encryption hash aes deflate

是否有任何算法或方法使用10-16字节密钥加密250个字符,加密字符串的大小仍然少于16个字符?我尝试使用AES 128/256 + DEFLATE,但最终加密的字符串相对于预期的字符串长度非常大。

谢谢!

3 个答案:

答案 0 :(得分:2)

首先,您需要在加密前尝试压缩。如果“AES 128/256 + DEFLATE”表示在压缩之前加密,那么您将永远不会得到任何压缩,因为加密数据实际上是随机的压缩器。

其次,即使你这样做,你通常也不会期望在250个字符上有太多压缩。压缩器需要的数据多于查找模式的数据。

第三,即使您拥有大量数据,也不会对高度冗余的数据进行16倍压缩。

答案 1 :(得分:1)

从技术上讲,你可以做到,但这取决于你对“character”的定义

例如,您可能认为Noël是四个字符。但是对于Unicode,它实际上是五个代码点

  • N + o + e + ¨ + l (使用U + 0308结合分音符) < / LI>

结合变音符号很有意思;你可以继续堆积变音符号。所以当你还有四个“字符”时,你有各种额外的代码点 -

  • NOEL

以上文字是四个“字符”,但是114 代码点

添加变音符可以为每个角色提供更多信息。

接下来是Unicode具有大字母表的事实。如果将字母表扩展到其他平面,则可以编码大量信息。它就像base-64,但是带有base-195088。

有关将大量信息塞入少数“字符”的更多信息,请参阅此stackexchange代码质询:

基于Stackoverflow Twitter编码挑战:

如果您有16个字符或16个字节,这一切都很大程度上取决于。

答案 2 :(得分:1)

您描述的算法是键控哈希。截断的Hmac / sha256符合规范,即您只使用生成的哈希的16个第一个字节。 但当然,这是不可逆转的。