相同长度的输出C#中的加密和解密

时间:2012-08-09 08:47:00

标签: c# .net algorithm encryption

  

可能重复:
  How do I encrypt a string and get a equal length encrypted string?

我是加密和解密的新手。我有一个24字符长的字符串。我需要加密和解密这个词。加密可能不太安全,但我需要加密的单词应该与输入字符串(24 char)的长度相同。我在网上搜索并找到了一些示例加密算法( AES,MD5 )。但加密的字太长于输入字符串。这是我们将与客户共享的产品密钥,因此不需要强加密。如果您共享示例代码将非常有用。

3 个答案:

答案 0 :(得分:4)

使用Vernam cipher。对于具有真正随机生成的密钥的单个字符串,理论上它是牢不可破的。如果您开始对多个字符串使用相同的密钥,则会显着降低其安全性,但显然您并不是在寻求最大的安全性。如果是,您必须能够为每个加密密码提供不同的随机密钥。

虽然您可以在网上找到大量示例代码,但我认为您自己实施它是一种很好的做法。这很简单。

答案 1 :(得分:2)

你正在寻找的似乎是Format-preserving encryption,我认为在.NET中没有任何实现(我当然没有使用过)。您可能需要为此考虑自定义算法。你说不需要强加密,但你显然需要算法不明显。不幸的是,有几百种方法可以做到这一点,所以这取决于哪一种适合你。

This seems to be a great post for encryption algorithms

答案 2 :(得分:0)

要使密文与明文的长度相同,请使用流密码。这可以是CTR模式下的块密码,例如AES-CTR,也可以是专用流密码,如Rabbit或RC4。

请注意,您无法重用密钥用于流密码,否则攻击者可能会破坏加密。使用相同密钥的两个密文可以用来完全消除密钥,只留下两个明文。

如果您只有一个24字节的字加密,那么这不是问题。如果您需要加密多个数据,那么密钥管理就变得非常重要。