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);
}
}
}