免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2553 | 回复: 6
打印 上一主题 下一主题

[C] 请求帮忙改一个小程序以支持通配符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-05 17:27 |只看该作者 |倒序浏览
最近找了一个叫screw的php源码加密小程序,挺好用,可惜不支持通配符。
一次命令只能对一个文件执行。
我看了一些这个加密工具的源码,发现主文件相对比较简单,可惜我对C不太熟,能否请高手帮忙修改一些一下,以支持通配符。如:
  1. #screw *
复制代码
来对文件夹下所有文件加密
该项目的sf主页:http://sourceforge.net/projects/php-screw/

screw.c 在tools目录下,代码如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <unistd.h>
  7. #include "../php_screw.h"
  8. #include "../my_screw.h"

  9. main(int argc, char**argv)
  10. {
  11.         FILE        *fp;
  12.         struct        stat        stat_buf;
  13.         char        *datap, *newdatap;
  14.         int        datalen, newdatalen;
  15.         int        cryptkey_len = sizeof pm9screw_mycryptkey / 2;
  16.         char        oldfilename[256];
  17.         int        i;

  18.         if (argc != 2) {
  19.                 fprintf(stderr, "Usage: filename.\n");
  20.                 exit(0);
  21.         }
  22.         fp = fopen(argv[1], "r");
  23.         if (fp == NULL) {
  24.                 fprintf(stderr, "File not found(%s)\n", argv[1]);
  25.                 exit(0);
  26.         }

  27.         fstat(fileno(fp), &stat_buf);
  28.         datalen = stat_buf.st_size;
  29.         datap = (char*)malloc(datalen + PM9SCREW_LEN);
  30.         fread(datap, datalen, 1, fp);
  31.         fclose(fp);

  32.         sprintf(oldfilename, "%s.screw", argv[1]);

  33.         if (memcmp(datap, PM9SCREW, PM9SCREW_LEN) == 0) {
  34.                 fprintf(stderr, "Already Crypted(%s)\n", argv[1]);
  35.                 exit(0);
  36.         }

  37.         fp = fopen(oldfilename, "w");
  38.         if (fp == NULL) {
  39.                 fprintf(stderr, "Can not create backup file(%s)\n", oldfilename);
  40.                 exit(0);
  41.         }
  42.         fwrite(datap, datalen, 1, fp);
  43.         fclose(fp);

  44.         newdatap = zencode(datap, datalen, &newdatalen);

  45.         for(i=0; i<newdatalen; i++) {
  46.                 newdatap[i] = (char)pm9screw_mycryptkey[(newdatalen - i) % cryptkey_len] ^ (~(newdatap[i]));
  47.         }

  48.         fp = fopen(argv[1], "w");
  49.         if (fp == NULL) {
  50.                 fprintf(stderr, "Can not create crypt file(%s)\n", oldfilename);
  51.                 exit(0);
  52.         }
  53.         fwrite(PM9SCREW, PM9SCREW_LEN, 1, fp);
  54.         fwrite(newdatap, newdatalen, 1, fp);
  55.         fclose(fp);
  56.         fprintf(stderr, "Success Crypting(%s)\n", argv[1]);
  57.         free(newdatap);
  58.         free(datap);
  59. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-12-05 17:36 |只看该作者

  1. main里面
  2. i = 1;
  3. while (argv[i] != NULL)
  4.    do_enc_per_file (v[i ++]) ;

  5. 对一个文件加密放到一个函数do_enc_per_file.
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-12-05 17:49 |只看该作者
谢谢楼上,我试着改下,然后编译看看。成功的话上来汇报

论坛徽章:
0
4 [报告]
发表于 2007-12-05 22:24 |只看该作者

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
5 [报告]
发表于 2007-12-05 23:20 |只看该作者
shell可以啊

论坛徽章:
0
6 [报告]
发表于 2007-12-06 09:32 |只看该作者
我把上面的screw.c文件改成下面这样,编译成功并可以运行,但是程序还是不支持通配符,只能执行单个文件。
我虽然了解C的基本语法,但是没有写过什么东西
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <unistd.h>
  7. #include "../php_screw.h"
  8. #include "../my_screw.h"

  9. main(int argc, char**argv)
  10. {
  11.   int i = 1;
  12.   
  13.   void do_enc_per_file(){
  14.         FILE        *fp;
  15.         struct        stat        stat_buf;
  16.         char        *datap, *newdatap;
  17.         int        datalen, newdatalen;
  18.         int        cryptkey_len = sizeof pm9screw_mycryptkey / 2;
  19.         char        oldfilename[256];
  20.         int        i;

  21.         if (argc != 2) {
  22.                 fprintf(stderr, "Usage: filename.\n");
  23.                 exit(0);
  24.         }
  25.         fp = fopen(argv[1], "r");
  26.         if (fp == NULL) {
  27.                 fprintf(stderr, "File not found(%s)\n", argv[1]);
  28.                 exit(0);
  29.         }

  30.         fstat(fileno(fp), &stat_buf);
  31.         datalen = stat_buf.st_size;
  32.         datap = (char*)malloc(datalen + PM9SCREW_LEN);
  33.         fread(datap, datalen, 1, fp);
  34.         fclose(fp);

  35.         sprintf(oldfilename, "%s.screw", argv[1]);

  36.         if (memcmp(datap, PM9SCREW, PM9SCREW_LEN) == 0) {
  37.                 fprintf(stderr, "Already Crypted(%s)\n", argv[1]);
  38.                 exit(0);
  39.         }

  40.         fp = fopen(oldfilename, "w");
  41.         if (fp == NULL) {
  42.                 fprintf(stderr, "Can not create backup file(%s)\n", oldfilename);
  43.                 exit(0);
  44.         }
  45.         fwrite(datap, datalen, 1, fp);
  46.         fclose(fp);

  47.         newdatap = zencode(datap, datalen, &newdatalen);

  48.         for(i=0; i<newdatalen; i++) {
  49.                 newdatap[i] = (char)pm9screw_mycryptkey[(newdatalen - i) % cryptkey_len] ^ (~(newdatap[i]));
  50.         }

  51.         fp = fopen(argv[1], "w");
  52.         if (fp == NULL) {
  53.                 fprintf(stderr, "Can not create crypt file(%s)\n", oldfilename);
  54.                 exit(0);
  55.         }
  56.         fwrite(PM9SCREW, PM9SCREW_LEN, 1, fp);
  57.         fwrite(newdatap, newdatalen, 1, fp);
  58.         fclose(fp);
  59.         fprintf(stderr, "Success Crypting(%s)\n", argv[1]);
  60.         free(newdatap);
  61.         free(datap);
  62.   }

  63.   while (argv[i] != NULL){
  64.     do_enc_per_file () ;
  65.     i++;
  66.   }

  67. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2007-12-06 10:15 |只看该作者
把函数定义写到了main函数中?天呐~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP