凯撒加密算法可以对字母字母进行简单的转换加密,方法是:字母的 ASCII 值加上某个数值后再和 256 做模运算。这样加密后的文件可能含有不可打印的字符,而且行结束,字符串结束和其它的控制字符都会被更改。解密时,只需要将转换时指定的值用负值表示,或者使用 256 减去原来的转换值即可。
示例程序:
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#define BUF_SIZE 256
int main(int argc, char **argv)
{
FILE *fin = NULL;
FILE *fout = NULL;
char InBuf[BUF_SIZE];
char OutBuf[BUF_SIZE];
int copy, nbyte;
int writeok;
int shift = atoi(argv[1]);
if (argc != 4) {
fprintf (stderr, "Usage: caesar shift file1 file2\n");
exit (EXIT_FAILURE);
}
if ((fin = fopen (argv[2], "r")) == NULL) {
fprintf (stderr, "Open %s failure\n", argv[2]);
exit (EXIT_FAILURE);
}
if ((fout = fopen (argv[3], "w+")) == NULL) {
fprintf (stderr, "Create %s failure\n", argv[3]);
exit (EXIT_FAILURE);
}
while ((nbyte = fread(InBuf, 1, 256, fin)) > 0 && writeok) {
for (copy = 0; copy < nbyte; copy++)
OutBuf[copy] = (InBuf[copy] + shift) % 256;
fwrite(OutBuf, 1, nbyte, fout);
}
fclose (fin);
fclose (fout);
return 0;
}
测试程序:
[beyes@beyes encry]$ cat chinese.txt
曲径通幽
[beyes@beyes encry]$ ./caesar 350 chinese.txt enchinese.txt
[beyes@beyes encry]$ cat enchinese.txt //加密后的文件为乱码
D�C�G��Ch
[beyes@beyes encry]$ ./caesar -350 enchinese.txt unchinese.txt //解密
[beyes@beyes encry]$ cat unchinese.txt //恢复
曲径通幽 |