保持格式的加密示例

本文关键字:加密 格式 | 更新日期: 2023-09-27 18:10:51

我想使用保格式加密将数字加密/解密为具有相同长度的字符串(仅包含数字和/或大写字符)。但我没有找到实施步骤。那么,谁能提供c# 2.0的工作示例呢?

例如

如果我加密固定长度的明文,如99991232(有或没有固定密钥),那么密码应该像23220978或ED0FTS。如果加密字符串的长度小于纯文本,那么它也是正确的。但密文长度不能大于明文,且密文长度必须为固定长度。

保持格式的加密示例

根据您的问题,我假设纯文本是数字,而密文可以是字母数字。由于这一点,很容易使一个编码方案。这使得您的格式保存不那么严格,并且可以利用这一点(如果纯文本也是字母数字,这将不起作用)。

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

因此给出纯文本:

1,2,3,4

我们将其编码为:

0001 - 0010 0011 - 0100

然后您可以通过保持长度的密码运行它(保持长度的密码的一个例子是计数器模式下的AES)。假设您得到以下值:

1001 - 1100 1011 - 1100

使用您的'BaseX'编码器进行编码,在我们的情况下,我们将得到:

C, B, C

长度相同。我为你拼凑了一个样本(有点大,粘贴在这里)。

正如Henk所说,"格式保留加密"没有定义。我能想到两个可能的答案:

  1. 使用AES并将密文字节数组转换为十六进制字符串或Base64。
  2. 使用一个简单的vigen密码,只需替换您想要替换的字符。

你需要更清楚地说明你的需求。

ETA:你没有说你需要多安全。标准vigen无法抵御任何类型的强大攻击,但对于临时用户来说是安全的。vigen可以做到绝对安全,但这需要真正的随机密钥材料,就像要加密的明文一样多,而且通常是不切实际的。