WPS文字处理系统是目前用户较多的软件,它以良好的用户界面。强大的打印功能而受到大家的喜爱。许多用户喜欢使用其文件的加密功能,但也常看到有些用户因为忘记密码而焦急万分,为此我用C语言编了一个程序来读取密码。WPS的文件密码被存在文件的733-740字节中,在存盘前对密码做了简单的处理:将其8位二进制ASCII(功能键fl-fl0的ASCII码按0算,小写字母转换为大写)的高四位与低四位交换然后取反,这样做的一个优点是加解密的算法一致。下面的程序对于与WPS兼容的CWS、王码480等软件所产生的文件也适用。该程序已在Borland C++2.0下编译通过。
PASSWORD.C #include<stdio.h> #include<process.h> main(int argc,char *argv[]) { FILE *fp; int i,j,a[8],b[8]; printf("读取WPS密码程序 V1.0\n"); printf("作者:李海 Copyright (C) 1993 热情软件屋\n\n\n"); if (argc!=2) { printf("Usage:Password 文件名\n"); exit(-1); } if ((fp=fopen(argv[1],"r"))==NULL){ printf("Can't open %s\n",argv[1]); exit(-1); } fseek(fp,733L,SEEK-SET); if((a[0]=fgetc(fp))==0){ printf("没有密码!\n"); exit(-1); } else print("内码:%2x",a[0]); i=1; while (i<8){ if((a[i]=fgetc(fp))==0) break; printf("%02x",a[i]); i++; } putchar('\n'); fclose(fp); printf("密码:"); for (j=0;j<i;j++){ b[i]=(a[j]<<4 | a[j]>>4) & 255; if (b[j]==0)printf("功能键"); else if (b[j]==8) printf("Bs"); else if (b[j]=='\t')printf("Tab"); else if (b[j]==27) printf("Esc"); else if (b[j]==' ') printf("空格"); else if (b[j]>='!' && b[j]<='-') printf("%c",b[j]); } putchar('\n'); exit (-1); }
如果您有任何建议,请给我发电子邮件:
。
版权所有 李海,热情软件屋 1997-2006