抱歉,前面关于加解密流程部分写错了。更正如下:
i = 0;
for each char M in plain-text
{
t = Map_S2T[key[i++]] % TABLES;
M' = Map_T2S[ Encode_Maps[t][Map_S2T[M]] ];
if (i == length-of-key) i = 0;
}
解密部分做类似修改。
另外,为提高效率,可以对 t 序列进行预计算放入一个数组,避免重复计算:
int table_index[MAX_KEY_LENGTH];
for (int i = 0; i < length-of-key; ++i)
table_index[i] = Map_S2T[key[i++]] % TABLES;
这样,在加解密时:
t = table_index[i];
解密过程与此类似(加密方与解密方必须拥有相同的映射表):
i = 0;
for each char M' in encoded-text
{
M = Map_T2S[ Decode_Maps[key[i++] % TABLES][Map_S2T[M']] ];
if (i == length-of-key) i = 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TABLES大小的选择
TABLES大小最好选为:2^log(N/2) 。(log以2为底).
例如,如果 N = 100, 则 TABLES = 32
我的考虑:
1。加密映射表的表下标= t % TABLES. 其中 0 <= t < N.
采取这个大小可以增加不同字符映射到相同加密映射表的几率,
从而避免不同字符总是映射到不同的加密映射表。我觉得这样可以增加破解难度