【9-12】有一种技巧可以对数据进行加密,并使用一个单词作为它的密钥。下面是它的工作原理:首先,选择一个单词作为密钥,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第一个,其余几个丢弃。现在,修改过的那个单词列于字母表的下面,如下所示:
最后,底下那行字母表中剩余的字母填充完整(不能和前面的重复):
在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母。因此,使用这个密钥,ATTACK AT DAWN(黎明时攻击)就会被加密为TPPTAD TP ITVH。这个题材共有三个程序(包括下面两个练习)。
-
第一个函数:
int prepare_key(char *key);
它接受一个字符串参数,它的内容就是需要使用的密钥单词,函数根据上面描述的方法把它转换成一个包含编好码的字符数组。假定key参数是个字符数组,其长度至少可以容纳27个字符。函数必须把密钥中的所有字符要么转换成大写,要么转换成小写(随你选择),并从单词中去除重复的字母,然后再用字母表中剩余的字母按照你原先所选择的大小写形式填充到key数组中去,如果处理成功,函数将返回一个真值,如果key参数为空或包含任何非字母字符,函数将返回一个假值。
-
第二个函数:
void encrypt(char *data, char const *key);
它使用前题prepare_key函数所产生的密钥对data中的字符进行加密。data中的非字母字符不作修改,但字母字符则用密钥所提供的编过码的字符一一取代源字符。字符的大小写状态应该保留。
-
第三个函数: