我想使用格式保留加密将数字加密/解密为字符串(只有数字和/或大写字符),长度相同。但我没有找到实施步骤。那么,任何人都可以为C#2.0提供WORKING样本吗?
例如,
如果我加密固定长度的明文,如99991232(带或不带固定密钥),则密码应该是23220978或ED0FTS。如果加密字符串的长度小于纯文本,那么它也可以。但密文长度不得大于纯文本,密文必须具有固定长度。
答案 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所说,“格式保留加密”未定义。我可以想到两个可能的答案:
您需要更清楚地指定您的要求。
ETA:你没有说你需要多么安全。标准的Vigenère不能抵御任何类型的强攻击,但对于临时用户来说是安全的。 Vigenère可以绝对安全,但这需要尽可能多的真正的随机密钥材料,因为它有明文,而且通常是不切实际的。