Possible Duplicate:
Which “good” block encryption algorithm has the shortest output?




我需要加密一个字符串,并且也能够解密它。我的问题是我需要使加密的字符串尽可能短,最好与输入的字符串长度相同。我看过密码学类,但最小的类似乎使用64位块。这意味着,如果我的字符串是9个字符长,那么我将得到更长的,经过填充的加密字符串。我需要能够通过电话向人们读取加密的字符串,因此必须提供短代码。谁能推荐解决方案,或者我需要编写自己的加密类来做到这一点?

最佳答案

如果您不介意字符串稍长一些,则可以使用带有任何常规分组密码的CTR mode加密。额外的长度来自以下事实:您必须在输出中包含唯一的nonce,否则它是不安全的。

例如,假设您不打算加密超过一百万个字符串,则可以选择随机数作为四个字母数字字符。这样一来,您的总空间为364≈168万可能的随机数。您只需要跟踪已使用的随机数,就不会重复使用它们。
(如果随机选择随机数,则由于birthday paradox的原因,它们的长度必须加倍。)

如果您不希望字符串在加密时变得更长,那么您需要的是format-preserving encryption

09-20 10:27