需要一种双向加密解决方案,可以创建一个短输出字符串

时间:2011-12-08 10:26:23

标签: c#-4.0 encryption

  

可能重复:
  Which “good” block encryption algorithm has the shortest output?

我需要加密字符串并且还能够解密它。我遇到的问题是我需要保持加密的字符串尽可能短,理想情况下与输入字符串的长度相同。我看过Cryptography类,但最小的大小似乎使用64位块。这意味着如果我的字符串长度为九个字符,那么我最终会得到一个更长的填充加密字符串。我需要能够通过电话向人们读取加密的字符串,因此必须使用短代码。任何人都可以推荐一个解决方案,还是我需要编写自己的加密类才能做到这一点?

1 个答案:

答案 0 :(得分:2)

如果你不介意你的字符串稍微更长,你可以使用任何传统的分组密码进行CTR mode加密。额外的长度来自于您必须在输出中包含唯一的nonce,否则它不安全。

例如,假设您不打算加密超过一百万个字符串,则可以选择nonce作为四个字母数字字符。这给你一个总空间36个 4 ≈168万个可能的随机数。你只需要跟踪你已经使用过哪些nonce,这样就不会重复使用它们。 (如果您随机选择你的随机数,由于birthday paradox,你必须使它们大约两倍。)

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