⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 def.h

📁 一款文件加密的小软件
💻 H
字号:
/*      def.h
 *      Copyright (c) starsStudio. 2004
 *      All Rights Reserved.
 */

typedef unsigned char BOOL;               /* 类型宏替换 */
typedef	unsigned char BYTE;
typedef	unsigned int  WORD;
typedef int           FILEHANDLE;

#define ROUNDMIN  6                       /* 加密轮数,分别对应三种长度的密钥
                                           * 要求轮数至少比-(密钥长度/8)大 */
#define ROUNDMED  9
#define ROUNDMAX  12

#define ALLFILES  FA_RDONLY|FA_DIREC \
                  |FA_HIDDEN|FA_SYSTEM \
                  |FA_ARCH                /* 设定找寻所有文件 */

#define TRUE  1
#define FALSE 0

#define KEY_DOWN      0x5000             /* 几个功能键的扩展扫描码值 */
#define KEY_UP        0x4800
#define KEY_LEFT      0x4b00
#define KEY_RIGHT     0x4d00
#define KEY_BACKSPACE 0x0e08
#define KEY_ENTER     0x1c0d
#define KEY_ESC       0x011b

/* 加解密标记 */
#define ENCRYPT 1
#define DECRYPT 0

#define LOGINKEYLENGTH    16             /* 登录密钥最大长度 */
#define FILENAMELENGTH    16             /* 文件名最大长度 */

/* 窗体属性值 */
#define DOUBLELINE        0
#define SINGLELINE        1
#define NORET             0
#define RET               1
#define NONPOP            0
#define POP               1
#define NONPLAIN          0
#define PLAIN             1

/* 文件列表菜单返回属性值 */
#define ISFILE            0
#define ISDIR             1
#define ISPAGEUP          2
#define ISPAGEDOWN        3
#define ISRETURN          4

#define MAXFILENUMS 28                   /* 文件列表中最多可显示的文件条目数最好不
                                          * 要随意修改该值,不过修改时比28小也可 */
#define SIZE  16834                      /* 一次可从文件中读取的字节数(16K)。该值
                                          * 越大,加解密速度越快。但如果出现空间不
                                          * 够的提示,则需要修改此值,比如8192(8K)
                                          * 4096(4K)等 */

typedef struct tagKey{
    int  flag;                           /* flag为ENCRYPT时表示加密,为DECRYPT时表示解密   */
    int  keyType;                        /* 密钥类型(指密钥长度) */
    BYTE *seedKey;                       /* 用户密钥首址 */
    BYTE *childKey;                      /* 轮子密钥首址 */
    BYTE kw0[16];                        /* 白化子密钥(两个16字节) */
    BYTE kw1[16];
    }KEYINFO;                            /* 密钥信息结构 */

typedef struct tagFileAttrib{
    int  flag;          /* flag为0时表示为文件;为1时表示目录;flag
                         * 为2时表示向上翻页,flag为3时表示向下翻页
                         * flag为4时表示返回上一级目录           */
    char fnStr[13];     /* 文件名 */
    }FILEATTRIB;                         /* 文件属性结构 */

typedef struct tagWindow{
    int  left;                           /* 窗体左上角横坐标 */
    int  top;                            /* 窗体左上角纵坐标 */
    int  width;                          /* 窗体宽 */
    int  height;                         /* 窗体高 */
    int  fillColor;                      /* 窗体背景填充色 */
    int  fontColor;                      /* 窗体中字体颜色 */
    int  lineColor;                      /* 窗体线条颜色 */
    int  bakColor;                       /* 窗体边框底色 */
    int  lineStyle;                      /* 窗体线条类型 */
    BYTE displayStr[256];                /* 窗体中显示的字符串首址 */
    BYTE title[32];                      /* 窗体名称 */
    int  curx;                           /* 窗体绘成后光标初始位置的横坐标(相对坐标) */
    int  cury;                           /* 窗体绘成后光标初始位置的纵坐标(相对坐标) */
    int  retFlag;                        /* 窗体有返回值的标记 */
    int  plainFlag;                      /* 向窗体输入字符时,是否显示真实值 */
    char *retStr;                        /* 窗体返回值(字符串)的首址 */
    int  retStrLen;                      /* 限制窗体返回字符串的长度 */
    int  popFlag;                        /* 如果当前窗体是弹出型窗体 */
    char *bufWindow;                     /* 储存被窗体覆盖的信息单元首址 */
    }WINDOWHANDLE;                       /* 窗体信息结构 */

WINDOWHANDLE login = {                   /* 登录窗体的相关属性值 */
    26, 10, 30, 6,
    BLACK, WHITE, BLACK, WHITE,
    DOUBLELINE,
    "   FILE ENCRYPTION SYSTEM   \n         <USE  SEA>         \n============================\nPassword:",
    " Login... ",
    10, 4,
    RET, NONPLAIN,
    NULL,
    8,
    POP, NULL
    };

WINDOWHANDLE bakGround = {               /* 背景窗体的相关属性值 */
    2, 2, 78, 23,
    BLACK, WHITE, BLACK, WHITE,
    DOUBLELINE,
    "\n\n                       *>> FILE ENCRYPTION SYSTEM <<*\n                   - USE SEA(Smart Encryption Algorithm) -",
    "",
    1, 4,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE funPanel = {                /* 功能选择面板(窗体)的相关属性值 */
    13, 8, 56, 15,
    BLACK, WHITE, BLACK, WHITE,
    DOUBLELINE,
    "",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE encryptItem = {             /* 加密功能项菜单的相关属性值 */
    28, 10, 26, 3,
    BLACK, WHITE, WHITE, BLACK,
    DOUBLELINE,
    "       ENCRPTION",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE decryptItem = {             /* 解密功能项菜单的相关属性值 */
    28, 14, 26, 3,
    BLACK, WHITE, WHITE, BLACK,
    DOUBLELINE,
    "       DECRPTION",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE exitItem = {                /* 退出功能项菜单的相关属性值 */
    28, 18, 26, 3,
    BLACK, WHITE, WHITE, BLACK,
    DOUBLELINE,
    "          EXIT",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE keyPanel = {                /* 密钥长度选择面板(窗体)的相关属性值 */
    15, 9, 30, 11,
    BLACK, WHITE, WHITE, BLACK,
    DOUBLELINE,
    "",
    "[Choose Key Length]",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    POP, NULL
    };

WINDOWHANDLE key128Item = {              /* 128bits长度密钥菜单项的相关属性值 */
    20, 10, 20, 3,
    BLACK, WHITE, WHITE, BLACK,
    DOUBLELINE,
    " 16Bytes, 128Bits ",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE key192Item = {              /* 192bits长度密钥菜单项的相关属性值 */
    20, 13, 20, 3,
    BLACK, WHITE, WHITE, BLACK,
    DOUBLELINE,
    " 24Bytes, 192Bits ",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE key256Item = {              /* 256bits长度密钥菜单项的相关属性值 */
    20, 16, 20, 3,
    BLACK, WHITE, WHITE, BLACK,
    DOUBLELINE,
    " 32Bytes, 256Bits ",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    NONPOP, NULL
    };

WINDOWHANDLE filePath = {                /* 文件路径名输入框的相关属性值 */
    21, 13, 40, 5,
    BLACK, WHITE, BLACK, WHITE,
    SINGLELINE,
    "[i] File path...\n======================================\n>",
    "",
    2, 3,
    RET, PLAIN,
    NULL,
    0,
    POP, NULL
    };

WINDOWHANDLE fileList = {                /* 文件列表框的相关属性值 */
    40-(MAXDIR+2)/2+1, 10, MAXDIR+2, 11,
    WHITE, BLACK, BLACK, WHITE,
    SINGLELINE,
    "",
    "",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    POP, NULL
    };

WINDOWHANDLE keyInput = {                /*  密钥输入框的相关属性值 */
    23, 13, 36, 5,
    BLACK, WHITE, BLACK, WHITE,
    DOUBLELINE,
    "[i] User Key...\n==================================\n>",
    "",
    2, 3,
    RET, PLAIN,
    NULL,
    0,
    POP, NULL
    };

WINDOWHANDLE message = {                 /* 消息框的相关属性值 */
    0, 13, 0, 6,
    BLACK, WHITE, BLACK, WHITE,
    DOUBLELINE,
    "",
    "[Message]",
    1, 1,
    NORET, PLAIN,
    NULL,
    0,
    POP, NULL
    };

extern BOOL Login(void);                                /* 登录本软件系统 */
extern void SysMainFun(void);                           /* 系统主函数 */
extern void SeaENDE(FILEHANDLE *srcFilehandle,
                    FILEHANDLE *dstFileHandle);         /* 加密或解密给定文件句柄号的文件
                                                         * 调用Encrypt()或Decrypt()   */
extern void Encrypt(FILEHANDLE *srcFilehandle,          /* 加密给定文件句柄号的文件 */
                    FILEHANDLE *dstFileHandle);
extern void Decrypt(FILEHANDLE *srcFilehandle,          /* 解密给定文件句柄号的文件 */
                    FILEHANDLE *dstFileHandle);

extern BOOL GetFileHandle(FILEHANDLE *srcFilehandle,    /* 获取源文件和目标文件的句柄号 */
                          FILEHANDLE *dstFileHandle);
extern int  ViewFiles(FILEATTRIB fnAttrib[24],          /* 列出当前搜索到的文件,并返回列表中的选择项 */
                      int  fileNums);
extern int  PassPages(int p);                           /* 将当前目录下的文件列表翻过p页 */
extern BOOL GetFilePath(void);                          /* 取得文件路径 */
extern BOOL CheckExist(char *pathName);                 /* 检测当前目录下是否存在某个文件 */
extern void FileENDE(void);                             /* 文件加密或解密 */

extern void SEA    (BYTE* data, KEYINFO *ck);           /* 用密钥ck加密或解密data数组 */
extern void Brown(BYTE* data);
extern void Feistel(BYTE* data, KEYINFO *ck);

extern BOOL Key       (KEYINFO *ck);                    /* 得到种子密钥并扩展出子密钥。调
                                                         * 用AskKeys(),ExpandKeys()   */
extern BOOL AskKeys   (KEYINFO *ck);                    /* 要求输入用户密钥 */
extern BOOL ExpandKeys(KEYINFO *ck);                    /* 扩展出轮子密钥和白化子密钥 */
extern void FreeKey   (KEYINFO *ck);                    /* 释放密钥申请的堆空间 */

extern void Frame (WINDOWHANDLE *tmpWin);               /* 绘制窗体,由Window()和Message()调用 */
extern BOOL Window     (WINDOWHANDLE *tmpWin);          /* 绘制窗体并根据设定等待输入 */
extern void FreeWindow (WINDOWHANDLE *tmpWin);          /* 释放弹出型窗体和有返回值窗体申请的堆空间 */
extern BOOL Message    (WINDOWHANDLE *tmpMsg);          /* 显示消息 */
extern void FreeMessage(WINDOWHANDLE *tmpMsg);          /* 释放弹出型消息窗体申请的堆空间 */
extern int  Panel(WINDOWHANDLE **pPanel, int num);      /* 面板显示并返回面板上选择的菜单项 */
extern WORD GetKey(void);                               /* 检测键盘按键并返回按键的扩展扫描码 */
extern void Beeper(long delayTime);
extern void CopyTo(char *strDst,                        /* 指定长度的字符数组拷贝 */
                   char *strSrc, int length);
extern void ToLower(char *str);                         /* 将str中的大写字母转换为小写字母 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -