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

How to generate a small encrypted output (around 16 Bytes) from 250 characters and a 16 byte key?

是否有任何算法或方法可以使用 10-16 字节的密钥加密 250 个字符,并且加密字符串的大小保持小于 16 个字符?我尝试使用 AES 128/256 + DEFLATE,但最终的加密字符串相对于预期的字符串长度而言相当大。

谢谢!

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

其次,即使您这样做了,您通常也不会期望对仅 250 个字符进行大量压缩。压缩器需要比查找模式更多的数据。

第三,除了高度冗余的数据,你不会得到 16 倍的压缩,即使你有很多数据。

从技术上讲你可以做到,但这取决于你对 "character".

的定义

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

  • N + o + e + ¨ + l (使用 U+0308 组合分音符)

组合变音符号很有趣;你可以继续使用变音符号。因此,虽然您仍然有四个 "characters",但您还有各种额外的代码点 -

  • noe˿̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼͇͈͉͍͎̀́̂̃̄̅̆İ̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿̀́͂̓̈́͆͊͋͌̕̚ͅ͏͓͔͕͖͙͚͐͑͒͗͛ͣͤͥͦͧͨͩͪͫͬͭͮͯ͘͜͟͢͝͞͠͡l

上面的文字是四个"characters",但是是114个代码点.

添加变音符号可为每个字符提供更多信息。

接下来是 Unicode 的字母表很大。如果将字母表扩展到其他位面,则可以编码很多信息。它类似于 base-64,但使用 base-195088。

有关将大量信息塞入少数 "characters" 的更多信息,请参阅此 stackexchange 代码挑战:

基于 Whosebug Twitter 编码挑战:

  • Twitter image encoding challenge

这完全取决于您是否有 16 个字符或 16 个字节。

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