如何从 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 个字节。
但当然,这是不可逆转的。
是否有任何算法或方法可以使用 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 个字节。 但当然,这是不可逆转的。