📄 sfile.c
字号:
/** revision : 1.2.0 This code works on: Solaris 2.6 and above, Linux, Win32, IBM OS/390 Dependency: sfile_api.h, lib_sfile_XXX.a purpose: create a "sfile" executable use following functions: int PBE_EncryptFile(char* passwd,const char* in,const char* out); int PBE_DecryptFile(char* passwd,const char* in,const char* out);**/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "sfile_api.h"#define MAX_PASS_LEN 128#define MAX_FILE_LENGTH 256void Usage();int main(int argc, char* argv[]) { char passwd[MAX_PASS_LEN],passwd1[MAX_PASS_LEN]; char sFileName[MAX_FILE_LENGTH]; FILE *fp; int nFileNameLength; int i,flag; if(argc < 4) { Usage(); return -1; } if(argv[1][0] != '-' || 2 != strlen(argv[1]) ) { Usage(); return -1; } switch(argv[1][1]) { case 'e': if( argc != 5 && argc != 6 && argc != 7 && argc != 8 ) { Usage(); return -1; } flag = -1; /* app -e -in sourcefile -p password */ if ( argc == 6 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'p' ) { if ( strlen(argv[5]) < 8 ) { printf("Password must be at least 8 chars.\n"); return -1; } strcpy(passwd,argv[5]); /* Make up the target file by appending .sealed */ strcpy(sFileName,argv[3]); strcat(sFileName,".sealed"); flag = 0; } /* app -e -in sourcefile -p */ if ( argc == 5 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'p' ) { for (i=0;i<3;i++) { printf("Please input the password (At least 8 chars):"); scanf("%s",passwd); printf("Please input the password again:"); scanf("%s",passwd1); if ( strcmp(passwd,passwd1) == 0 && i < 3 && strlen(passwd) >= 8 ) break; } if ( i == 3 ) return -1; strcpy(sFileName,argv[3]); strcat(sFileName,".sealed"); flag = 0; } /* app -e -in sourcefile -out targetfile -p */ if ( argc == 7 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'o' && argv[4][2] == 'u' && argv[4][3] == 't' && argv[6][0] == '-' && argv[6][1] == 'p' ) { for (i=0;i<3;i++) { printf("Please input the password (At least 8 chars):"); scanf("%s",passwd); printf("Please input the password again:"); scanf("%s",passwd1); if ( strcmp(passwd,passwd1) == 0 && i < 3 && strlen(passwd) >= 8 ) break; } if ( i == 3 ) return -1; strcpy(sFileName,argv[5]); flag = 0; } /* app -e -in sourcefile -out targetfile -p password */ if ( argc == 8 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'o' && argv[4][2] == 'u' && argv[4][3] == 't' && argv[6][0] == '-' && argv[6][1] == 'p' ) { if ( strlen(argv[7]) < 8 ) { printf("Password must be at least 8 chars.\n"); return -1; } strcpy(sFileName,argv[5]); strcpy(passwd,argv[7]); flag = 0; } if (flag == 0) { /* Let's do the encryption work */ fp=fopen(argv[3],"rb"); if ( fp == NULL ) { printf("Can't open the source file!\n"); return -1; } fclose(fp); flag=PBE_EncryptFile(passwd,argv[3],sFileName); if (flag == 0) { printf("Encrypt successfully!\n"); return 0; } else { printf("Encrypt failed!\n"); return -1; } }else{ Usage(); return flag; } break; /**************** Decryption ****************/ case 'd': if( argc != 5 && argc != 6 && argc != 7 && argc != 8 ) { Usage(); return -1; } /* app -d -in encryptedfile -p */ if ( argc == 5 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'p' ) { printf("Please input the password :"); scanf("%s",passwd); nFileNameLength=strlen(argv[3]); strcpy(sFileName,argv[3]); if ( sFileName[nFileNameLength-7] == '.' && sFileName[nFileNameLength-6] == 's' && sFileName[nFileNameLength-5] == 'e' && sFileName[nFileNameLength-4] == 'a' && sFileName[nFileNameLength-3] == 'l' && sFileName[nFileNameLength-2] == 'e' && sFileName[nFileNameLength-1] == 'd' ) { sFileName[nFileNameLength-7]='\0'; } else { printf("Expect source file with .sealed extension!\n\n"); return -1; } } /* app -d -in encryptedfile -p password */ if ( argc == 6 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'p' ) { strcpy(passwd,argv[5]); nFileNameLength=strlen(argv[3]); strcpy(sFileName,argv[3]); if ( sFileName[nFileNameLength-7] == '.' && sFileName[nFileNameLength-6] == 's' && sFileName[nFileNameLength-5] == 'e' && sFileName[nFileNameLength-4] == 'a' && sFileName[nFileNameLength-3] == 'l' && sFileName[nFileNameLength-2] == 'e' && sFileName[nFileNameLength-1] == 'd' ) { sFileName[nFileNameLength-7]='\0'; } else { printf("Expect source file with .sealed extension!\n\n"); return -1; } } /* app -d -in encryptedfile -out targetfile -p */ if ( argc == 7 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'o' && argv[4][2] == 'u' && argv[4][3] == 't' && argv[6][0] == '-' && argv[6][1] == 'p' ) { printf("Please input the password :"); scanf("%s",passwd); strcpy(sFileName,argv[5]); } /* app -d -in encryptedfile -out targetfile -p password */ if ( argc == 8 && argv[2][0] == '-' && argv[2][1] == 'i' && argv[2][2] == 'n' && argv[4][0] == '-' && argv[4][1] == 'o' && argv[4][2] == 'u' && argv[4][3] == 't' && argv[6][0] == '-' && argv[6][1] == 'p' ) { strcpy(passwd,argv[7]); strcpy(sFileName,argv[5]); } /* Let's do the work */ fp=fopen(argv[3],"rb"); if ( fp == NULL ) { printf("Can't open the source file %s\n",argv[3]); return -1; } fclose(fp); fp=fopen(sFileName,"wb"); if ( fp == NULL ) { printf("Can't open the target file %s\n",sFileName); return -1; } fclose(fp); flag=PBE_DecryptFile(passwd,argv[3],sFileName); if ( flag == 0 ) { printf("Decrypt successfully!\n"); return 0; } else { printf("Decrypt failed!\n"); return flag; } } return -1;}void Usage() { printf(" Usage:\n"); printf(" -e -in originalfile [-out targetfile] -p [password] ;to encrypt file\n"); printf(" -d -in encryptedfile [-out targetfile] -p [password] ;to decrypt file\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -