文件的加密与解密

1 移位加密法

   移位是指组成信息的文字或字母被简单的重排,形成互相颠倒的一组新的序列。这是最简单的一种加密方法。基本思想是将每个字母与它前面的字母相对应。根据向前对应位数的不同可以得到不同的加密结果,但是算法思想是一样的。

程序环境:Turbo C环境,代码如下:

#include <stdio.h>

main()

{

    char ch;

    while((ch=getchar())!='/n')

    {

         if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

         {

             ch=ch-8;

             if((ch<'a'&&ch>'a'-8)||ch<'A') ch=ch+26;//加入这条语句的目的大家一看ASCII表就知道了

         }

         putchar(ch);

    }

    while(ch=getchar()!='/n')

    putchar(ch);

    putchar('/n');

}

该程序实现对ASCII码表字母的移位操作。本程序采用了简单的移位技术,加密的安全性不高,但是执行效率确实很高的。

 

2 伪随机数加密法

  利用该方法对各类磁盘文件进行加密是一种简单易行的方法。加密的原理是利用一个随机数序列与磁盘文件中的内容进行运算,将结果存入文件。解密时利用完全相同的伪随机数序列对文件内容进行逆运算,所的结果就是加密前的文件内容。

Turbo c中有两个函数,一个为伪随机数产生起点,另一个为伪随机数产生器。控制伪随机数产生的条件,就能在任意时刻得到完全一致的伪随机数序列。实现步骤

a.将要加密的文件内容读入n个字节长的字符串中,n的长度有文件长度决定。

b.读入整数K1,K2,K3。这3个数值决定了伪随机数产生的起点和产生条件。不同的K值可以得到完全不同的伪随机数序列。

c.由K1,K2,K3决定的n个伪随机数与字符串内容进行逻辑异或运算,结果存在字符串中。最后将字符串写回到文件保存。

d.由于异或运算的特点,加密和解密都是同一个过程。

#include <stdio.h>

#include <stdlib.h>

union

{

    int  value;

    struct

    {

         char first;

         char second;

    }fran;

}num;

main()

{

      FILE *fp,*name2;

      int i,t,len,k1,k2,k3,k4,k5;

      float j;

      char name1,buf[60000];

     printf("/n input filename that you want to lock or open:");

     scanf("%s",name1);

     if((fp=fopen(name1."rb"))==NULL)

     {

          printf("File cannot be opened/n");

          exit(1);

     }

     else

          printf("File opened for encrypt/n");

     j=filelength(name1);

     printf("/ninput key1:");

     gets(k1);

     printf("/ninput key2:");

     gets(k2);

     printf("/ninput key3:");

     gets(k3);

     srand(k1);

     for(i=0;i<k2;i++)

     {

           k4=rand();

     }

     k5=(k3+k2)/2;

    for(i=0;i<j;i++)

    {

          num.value=rand();

          if(num.fran.first<=33)

               num.fran.first=num.fran.first+33;

          buf[i]=num.fran.first^buf[i];

    }

    fopen(name2,"wb")

    fputs(buf,name2);

    printf("/nFile is already encrypted");

    fclose(name1);

    fclose(name2);

}

3 命令加密法

命令加密法是指当用户键入一个完整的文件名时,这个文件将被加密,当要解密的时候,只要再次输入该文件就可以了。

下面的程序就是一个命令加密程序,原理是:以二进制形式打开文件,每次读出SIZE个字节与输入的口令字节相异或,再写回原来位置;解密过程相同。

#include <stdio.h>

#include <stdlib.h>

#define SIZE 64

void password(int fp,char *pd)

{

    int num,i,initread;

    long ig;

    char *st,buf[SIZE];

    st=pd;

    ig=filelength(fp);

    while(ig>0)

    {

         initread=0;

         num=fseek(fp,SIZE,intread);

         if(num)

         {

              i=0;

              while(*st&&(i<num))

              {

                   buf[i]=buf[i]^*st;

                   st++;

                   i++;

              }

         }

         initread+=SIZE;

         ig=ig-SIZE;

    }

}

 

char *cmd,*pwd;

main()

{

     char name1,buf[40];

     int fp;

     while(1)

     {

           getcwd(buf,40);

           printf("%s>",buf);

           gets(cmd);

           printf("/n input filename that you want to lock or open:");

           scanf("%s",name1);

          if((fp=open(name1,"rb"))==NULL)

         {

             printf("File cannot be opened/n");

             exit(1);

          }

         else

         {

             printf("File opened for encrpty/n");

             printf("password:");

             gets(pwd);

             if(*pwd)

                  password(fp,pwd);

             fclose(fp);

          }

     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值