曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4317|回复: 0
打印 上一主题 下一主题

凯撒加密算法

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-9-10 17:25:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
凯撒加密算法可以对字母字母进行简单的转换加密,方法是:字母的 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        //恢复
曲径通幽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 04:36 , Processed in 0.077914 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表