我的加密算法

笑面佛_正版 2002-08-04 07:27:18
以下是我个人写的一个加密算法,编译环境为TC20,当然在VC60下也应该可以编译,大家帮我看看调试加密性能如何,欢迎进行一切不择手段反编译汇编,看看是否可盗取得到密码.
有结果和我联系. E-MAIL:wgjmail@cmmail.com QQ:21898527

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20

main(int argc,char *argv[])
{
void lock();
void unlock();
FILE *fp;
int n=2;
argv[1]=strupr(argv[1]);
while(n<argc)
{
if((fp=fopen(argv[n],"rb+"))!=NULL)
{
if(strcmp(argv[1],"/L")==0)
lock(fp,argv[n]);
if(strcmp(argv[1],"/U")==0)
unlock(fp,argv[n]);
fclose(fp);
}
else
printf("\tSORRY!!! File %s not found.\n",strupr(argv[n]));
n++;
}
if(argc<=2)
{
printf("Usage MYLOCK /L /U file1 file2 ...\n");
printf("\nWGJ\t1.1\t 2002.7.25-2002.7.28");
}
}

void Get_password(pass,max)
int max;
unsigned char *pass;
{
int n;
for(n=0;n<max-1;n++)
{
*pass=(char)getch();
if((int)*pass!=13)
printf("*");
else
break;
pass++;
}
*pass='\0';
}

void lock(fp,filename)
FILE *fp;
char *filename;
{
FILE *fp2;
int num,flag,len;
unsigned long t,filelen;
unsigned char ch,key,key2,pass[MAX],password[MAX];
do
{
printf("FILE: %-13s \tPassword:",strupr(filename));
Get_password(pass,MAX);
printf("\n\t\t\tPassword again:");
Get_password(password,MAX);
printf("\n");
flag=strcmp(pass,password);
}while(flag);
fp2=fopen("temp","wb");
randomize();
key=random(256);
key2=key;
fputc(key,fp2);
len=strlen(pass);
for(num=0;num<len;num++)
key2=(key2 ^ pass[num])+pass[num];
fputc(key2,fp2);
num=0;
ch=fgetc(fp);
while(!feof(fp))
{
ch=ch ^ pass[num];
fputc(ch,fp2);
ch=fgetc(fp);
num++;
if(num>=len)
num=0;
}
filelen=ftell(fp);
for(t=0;t<filelen;t++)
fputc(0,fp);
fclose(fp);
fclose(fp2);
remove(filename);
rename("temp",filename);
printf("\t\t\tLocked,OK.\n");
for(num=0;num<len;num++)
pass[num]=password[num]=num;
num=0;len=0;
t=0;filelen=0;
ch=0;key=0;key2=0;
}

void unlock(fp,filename)
FILE *fp;
char *filename;
{
FILE *fp2;
int flag,len,num;
unsigned long t,filelen;
unsigned char ch,key,key2,password[MAX];
key=fgetc(fp);
key2=fgetc(fp);
printf("FILE: %-13s \tPassword:",strupr(filename));
Get_password(password,MAX);
len=strlen(password);
for(num=len-1;num>=0;num--)
key2=(key2-password[num]) ^ password[num];
if (key==key2)
flag=0;
if(!flag)
{
num=0;
ch=fgetc(fp);
fp2=fopen("temp","wb");
while(!feof(fp))
{
ch=ch ^ password[num];
fputc(ch,fp2);
ch=fgetc(fp);
num++;
if(num>=len)
num=0;
}
filelen=ftell(fp);
for(t=0;t<filelen;t++)
fputc(0,fp);
fclose(fp);
fclose(fp2);
remove(filename);
rename("temp",filename);
printf("\n\t\t\tUnlock,OK.\n");
}
else
printf("\n\t\t\tPassword Error!!!\n");
for(num=0;num<len;num++)
password[num]=num;
num=0;len=0;
t=0;filelen=0;
ch=0;key=0;key2=0;
fclose(fp);
fclose(fp2);
}
...全文
32 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
carkey 2003-05-06
  • 打赏
  • 举报
回复
是不能破还是破不了?
能破的话我就发给你!
笑面佛_正版 2002-08-04
  • 打赏
  • 举报
回复
不会,字节操作,一个字节能超过256吗,够了.
是的,随机数在一些高手手中根本没有用,其实你发现既使不随机随便用个值都一样,密码长度我不管了,最长19位,不过其值为256的 密码长度 次幂运算,也就是说在输入密码时你用ALT+F1等来做密码都可以.
sjy 2002-08-04
  • 打赏
  • 举报
回复
这种算法以前看不少人用过,虽极简单,但不怎么好破,
如果说有什么不好,我觉得
1。KEY是UNSIGNED CHAR太小了,错了密码也有1/256的机会会解开,虽然
解出来的不是原文,但不很方便,可能搞大点好。
2。RANDOM()产生的随机数并不是怎么随机,如果加上系统时间
和硬盘序列号看上去会结实点
3。应该强制用户输入>6位的密码,要不极易用穷举法破出原文。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧