简单的加密解密——逐字节加法减法C语言实现

对称加密体制,由用户指定自己的密钥key
加密函数:M = P + key
解密函数:P = M - key
因此加密函数和解密函数互为逆函数
只要将明文文件中的一个字节代入加密函数中进行运算,得到的结果即为一个字节的密文数据
同理将密文文件中的一个字节代入解密函数中进行运算,得到的结果即为一个字节的明文数据

#include <cstdio>
#include <cstdlib>

int openSrcFile(char ** buffer) //读取文件
{
    FILE * myfile_src;
    char filename[20];
    long file_size;
    printf("Please input the path and filename of the file you want to process\n");
    scanf("%s", filename);
    if(!(myfile_src = fopen(filename, "rb")))
    {
        printf("ERROR!");
    }
    fseek(myfile_src, 0, SEEK_END);
    file_size = ftell(myfile_src);
    fseek(myfile_src, 0, SEEK_SET);

    *buffer = (char *)malloc(file_size);
    fread(*buffer, 1, file_size, myfile_src);
    fclose(myfile_src);
    return file_size;
}

void encryption(char buffer[], long file_size, int key)  //加密函数
{
    long i;
    for(i = 0; i < file_size; i++)
    {
        buffer[i] += key;   //M = P + key
    }
}

void decryption(char buffer[], long file_size, int key)  //解密函数
{
    long i;
    for(i = 0; i < file_size; i++)
    {
        buffer[i] -= key;   //P = M - key
    }
}

void saveDstFile(char * buffer, long file_size) //保存文件
{
    FILE * myfile_dst;
    char filename[20];
    printf("Please input the path and filename of the file you have processed\n");
    scanf("%s", filename);
    if(!(myfile_dst = fopen(filename, "wb")))
    {
        printf("ERROR");
    }
    fwrite(buffer, 1, file_size, myfile_dst);

    printf("OK");
    fclose(myfile_dst);
}

void Process(int a)
{
    char * buffer;
    int key;
    long file_size;
    file_size = openSrcFile(&buffer);
    printf("Please input the key (a integer) for encryption of decryption\n");
    scanf("%d", &key);

    if(a == 0)
    {
        encryption(buffer, file_size, key);
    }
    else
    {
        decryption(buffer, file_size, key);
    }
    saveDstFile(buffer, file_size);
}

void menu(void)
{
    printf("*************************************************************\n");
    printf("===========A SIMPLE ENCRYPTION / DECRYPTION SYSTEM===========\n");
    printf("ENCRYPTION press 'E'    DECRYPTION press 'D'    QUIT press 'Q'\n");
    printf("*************************************************************\n");
}

int main()
{
    char flag;
    menu();
    flag = getchar();
    getchar();
    while(flag != 'Q')
    {
        switch(flag)
        {
            case 'E' : Process(0);break;
            case 'D' : Process(1);break;
            default  : printf("Input Error!\n");break;
        }
        flag = getchar();
        getchar();
    }
    return 0;
}

 

posted @ 2013-10-01 15:36  瓶哥  Views(1222)  Comments(0Edit  收藏  举报