office_tools 版 (精华区)

发信人: shenxi (阳光), 信区: OA
标  题: 读取WPS文件的密码
发信站: 哈工大紫丁香 (2000年06月17日13:05:12 星期六), 站内信件

WPS文字处理系统是目前用户较多的软件,它以良好的用户界面。强大的打印功能而受到
大家的喜爱。许多用户喜欢使用其文件的加密功能,但也常看到有些用户因为忘记密码而
焦急万分,为此我用C语言编了一个程序来读取密码。WPS的文件密码被存在文件的733-7
40字节中,在存盘前对密码做了简单的处理:将其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);
}

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.170.203]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.409毫秒