曲径通幽论坛

标题: 凯撒加密算法 [打印本页]

作者: beyes    时间: 2011-9-10 17:25
标题: 凯撒加密算法
凯撒加密算法可以对字母字母进行简单的转换加密,方法是:字母的 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        //恢复
曲径通幽





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2