格式保留加密示例

时间:2011-10-11 10:49:39

标签: c# encryption

我想使用格式保留加密将数字加密/解密为字符串(只有数字和/或大写字符),长度相同。但我没有找到实施步骤。那么,任何人都可以为C#2.0提供WORKING样本吗?

例如,

如果我加密固定长度的明文,如99991232(带或不带固定密钥),则密码应该是23220978或ED0FTS。如果加密字符串的长度小于纯文本,那么它也可以。但密文长度不得大于纯文本,密文必须具有固定长度。

2 个答案:

答案 0 :(得分:6)

根据您的问题,我假设纯文本是数字,其中密文可以是字母数字。因此,制作编码方案非常容易。这使得您的格式保存不那么严格,这可以利用(如果您的纯文本也是字母数字,这将不起作用。)

首先,找到2的幂大于你拥有的离散值的数量,例如,在数字情况下你有10个离散值 - 所以你要使用16(2 ^ 4)。为此创建一个'BaseX'编码方案(在本例中为Base16)并使用它将纯文本解码为二进制。

因此给出明文:

  

1,2,3,4

我们将其编码为:

  

0001-0010 0011-0100

然后,您可以通过保留长度的密码运行它(长度保留密码的一个示例是AES in counter mode)。假设您收到以下值:

  

1001-1100 1011-1100

使用“BaseX”编码器对此进行编码,在我们的例子中,我们将获得:

  

9,C,B,C

长度相同。我为你扔了一个sample(这里要点大一点)。

答案 1 :(得分:0)

正如Henk所说,“格式保留加密”未定义。我可以想到两个可能的答案:

  1. 使用AES并将密文字节数组转换为十六进制字符串或Base64。
  2. 使用简单的Vigenère cipher只需替换要替换的字符。
  3. 您需要更清楚地指定您的要求。

    ETA:你没有说你需要多么安全。标准的Vigenère不能抵御任何类型的强攻击,但对于临时用户来说是安全的。 Vigenère可以绝对安全,但这需要尽可能多的真正的随机密钥材料,因为它有明文,而且通常是不切实际的。