我需要加密文本(16个字符),最好使用AES,我需要限制结果加密文本的长度(14或16个字符)。加密必须只是字符和数字(不是'=','?',......)是否有可能?
我需要从密文(加密)中取回原始文本。
有没有办法使用RijndaelManaged(System.Security.Cryptography)来做到这一点 )?
答案 0 :(得分:4)
密文需要至少与纯文本一样长(在熵意义上)。你不能无损地压缩任意文本。因此,如果将输出限制为log2(10 + 2 * 26)* 16 = 95位,则输入不能再具有熵。这与AES无关,这是一个适用于所有无损编码的数学限制。
什么是角色? byte
char
或unicode-codepoint?
AES还有一个问题,就是它是一个块密码,最小输出大小等于块大小,128位。由于输出似乎是随机的,因此加密后无法压缩。这已经超出了你的限制。大多数加密模式都会增加一些额外的填充。
有一些函数可以将任意长度输入映射到恒定长度输出。它们被称为哈希函数。但是遵循pidgeon-hole原则,他们将多个输入映射到输出。因此,您无法获取所有可能输入的输入。