C語言實現文件加密,執(zhí)行參數有 【原文件路徑及名稱 密碼 加密后文件路徑及名稱】

1 題目

函數:encrypt()
功能:文件加密
描述:C語言實現文件加密,執(zhí)行參數有 【原文件路徑及名稱 密碼 加密后文件路徑及名稱】

2 思路

register 關鍵字

C語言中的關鍵字register代表寄存器存儲類型 register修飾符暗示編譯程序相應dao的變量zhuan將被頻繁地使用,如shu果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。這個關鍵字請求編譯器盡可能的將變量存在CPU內部寄存器中而不是通過內存尋址訪問以提高效率

加密

ch = ch ^ *(pwd + i);

采用異或方法進行加密,當然不同的情況可以采用不同的方式進行加密

3 代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
函數:fun()
功能:文件加密
描述:C語言實現文件加密,執(zhí)行參數有
【原文件路徑及名稱 密碼 加密后文件路徑及名稱】
**/



void encrypt(char *s_file, char *pwd, char *c_file);            // 文件加密函數
void encrypt(char *s_file, char *pwd, char *c_file) {           // 自定義函數encrypt用于加密
    int i = 0;
    FILE *fp1,  *fp2;                           // 定義fp1和fp2是指向結構體變量的指針
    register char ch;
    fp1 = fopen(s_file, "rb");
    if (fp1 == NULL) {
        printf("無法打開原文件.\n");
        exit(1);                            // 如果不能打開要加密的文件,便退出程序
    }
    fp2 = fopen(c_file, "wb");
    if (fp2 == NULL) {
        printf("無法打開被加密的文件.\n");
        exit(1);                            // 如果不能建立加密后的文件,便退出
    }
    ch = fgetc(fp1);
    while (!feof(fp1))  {                         // 測試文件是否結束
    
        ch = ch ^ *(pwd + i);                     // 采用異或方法進行加密,也可以采用其他方式方法就行加密
        i++;
        fputc(ch, fp2);                         // 異或后寫入fp2文件
        ch = fgetc(fp1);
        if (i > 9)
            i = 0;
    }
    fclose(fp1);
    fclose(fp2);
}

int main(int argc, char const *argv[]) {
    char sourcefile[50];                        // 被加密的文件名稱
    char codefile[50];                         // 加密后的文件名
    char pwd[10];                             // 密碼存儲
    if (argc != 4) {                          // 容錯處理,不滿足參數格式,需要自行輸入
        printf("請輸入原文件名稱:\n");
        gets(sourcefile);                         // 得到要加密的文件名
        printf("請輸入密碼:\n");
        gets(pwd);                            // 得到密碼
        printf("請輸入加密后文件名稱:\n");
        gets(codefile);                         // 得到加密后你要的文件名
        encrypt(sourcefile, pwd, codefile);
    }
    else {
        strcpy(sourcefile, argv[1]);
        strcpy(pwd, argv[2]);
        strcpy(codefile, argv[3]);
        encrypt(sourcefile, pwd, codefile);
    }
}

示例結果:

$ gcc ex049.c -o demo
$ ./demo
請輸入原文件名稱:
s_file.txt
請輸入密碼:
johngo_py
請輸入加密后文件名稱:
c_file.txt

最后就可以發(fā)現有加密后的文件產出

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容