可能重复:
如何加密字符串并获得等长的加密字符串?
我是加密和解密的新手。我有一个长度为 24 个字符的字符串。我需要加密和解密这个词。加密可能不太安全,但我需要加密字的长度应与输入字符串(24 个字符)相同。我通过网络搜索并找到了一些示例加密算法(AES,MD5)。但是加密的单词比输入字符串太长。这是我们将与客户共享的产品密钥,因此不需要强加密。如果您共享示例代码,这将很有用。
可能重复:
如何加密字符串并获得等长的加密字符串?
我是加密和解密的新手。我有一个长度为 24 个字符的字符串。我需要加密和解密这个词。加密可能不太安全,但我需要加密字的长度应与输入字符串(24 个字符)相同。我通过网络搜索并找到了一些示例加密算法(AES,MD5)。但是加密的单词比输入字符串太长。这是我们将与客户共享的产品密钥,因此不需要强加密。如果您共享示例代码,这将很有用。
使用Vernam 密码。对于具有真正随机生成的密钥的单个字符串,它在理论上是牢不可破的。如果您开始对多个字符串使用相同的密钥,则会显着降低其安全性,但显然您并不是在寻找最大的安全性。如果是,您必须能够为每个加密密码提供不同的随机密钥。
虽然你可以在网上找到很多示例代码,但我认为你自己实现它是一个很好的做法。这很简单。
您正在寻找的似乎是Format-preserving encryption,我认为.NET 中没有任何实现(我当然没有使用过)。您可能需要为此考虑一个自定义算法。你说不需要强加密,但你显然需要算法不明显。不幸的是,实际上有数百种方法可以做到这一点,所以这取决于哪一种适合你。
要使密文与明文长度相同,请使用流密码。这可以是 CTR 模式下的块密码,例如 AES-CTR,也可以是专用的流密码,例如 Rabbit 或 RC4。
请注意,您不能为流密码重复使用密钥,否则攻击者可能会破解加密。使用相同密钥的两个密文可以完全消除密钥,只留下两个明文。
如果您只有一个 24 字节字要加密,那么这不是问题。如果您需要加密多个数据,那么密钥管理就变得很重要。