关于加密:如何从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倍的压缩,即使您有大量的数据。


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


从技术上讲,你可以做到,但这取决于你对"性格"的定义。

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

  • Noe¨l(用u+0308组合分光)

组合音调符号很有趣;您可以不断地堆积音调符号。所以当你还有四个"字符"时,你有各种额外的代码点-

  • 诺伊?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????L

上面的文字是四个"字符",但是是114个代码点。

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

接下来是Unicode有一个很大的字母表。如果将字母表扩展到其他平面,就可以对许多信息进行编码。它和Base-64很像,但和Base-195088一样。

有关将大量信息塞进几个"字符"中的更多信息,请参阅此StackExchange代码挑战:

  • 将图像编码为tweets(极端图像压缩版)

基于StackOverflow Twitter编码挑战:

  • Twitter图像编码挑战

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