[Toy] [C] 加密程序

原因

其实本身没有什么特别的原因,只是想写一个软件练练手罢了

如何使用 (How to use)

1.输入密钥(如NB666)
2.输入文件名(须在此程序路径下或直接输入绝对路径)
或者
在使用前直接将需加密文件拖动到本程序上
就可以不输入文件名直接加密(推荐)(较为方便)

代码

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

int main(int cl,char* data[]) {
    printf("请输入你的密钥");
    char Password[256];
    long pwl = 0;
    fgets(Password, 256, stdin);
    for (int i = 0; Password[i] != '\n'; i++)
        pwl += Password[i];
    char filename[256];
    if (cl < 2)
    {
        printf("输入要加密的文件: ");
        fgets(filename, sizeof(filename), stdin);
    }
    else
        strcpy_s(filename,256,data[1]);
    filename[strcspn(filename, "\n")] = 0; // 去除换行符
    int i = strcspn(filename, ".");
    char fn_bh[20] = { 0 };
    strcpy_s(fn_bh, 20, &filename[i]);
    FILE* inputFile = nullptr;
    fopen_s(&inputFile, filename, "rb");
    if (!inputFile) {
        perror("文件打开失败");
        return 1;
    }

    fseek(inputFile, 0, SEEK_END);
    long fileSize = ftell(inputFile);
    fseek(inputFile, 0, SEEK_SET);

    char* fileBuffer = (char*)malloc(fileSize);
    if (!fileBuffer) {
        perror("内存分配失败");
        fclose(inputFile);
        return 1;
    }

    fread(fileBuffer, 1, fileSize, inputFile);
    fclose(inputFile);

    for (long i = 0; i < fileSize; i++) {
        fileBuffer[i] ^= pwl; // 简单异或加密
    }

    FILE* outputFile = nullptr;
    fopen_s(&outputFile,"encrypted.bin", "wb");
    if (!outputFile) {
        perror("加密文件创建失败");
        free(fileBuffer);
        return 1;
    }

    fwrite(fileBuffer, 1, fileSize, outputFile);
    fclose(outputFile);
    free(fileBuffer);

    printf("加密完成!\n");
    return 0;
}

char* s(char* data) {
    printf("请输入你的密钥");
    char Password[256];
    long pwl = 0;
    fgets(Password, 256, stdin);
    for (int i = 0; Password[i] != '\n'; i++)
        pwl += Password[i];
    char filename[256];
    strcpy_s(filename, 256, data);
    filename[strcspn(filename, "\n")] = 0; // 去除换行符
    int i = strcspn(filename, ".");
    char fn_bh[20] = { 0 };
    strcpy_s(fn_bh, 20, &filename[i]);
    FILE* inputFile = nullptr;
    fopen_s(&inputFile, filename, "rb");
    if (!inputFile) {
        perror("文件打开失败");
        return (char*)"e";
    }

    fseek(inputFile, 0, SEEK_END);
    long fileSize = ftell(inputFile);
    fseek(inputFile, 0, SEEK_SET);

    char* fileBuffer = (char*)malloc(fileSize);
    if (!fileBuffer) {
        perror("内存分配失败");
        fclose(inputFile);
        return (char*)"n";
    }

    fread(fileBuffer, 1, fileSize, inputFile);
    fclose(inputFile);

    for (long i = 0; i < fileSize; i++) {
        fileBuffer[i] ^= pwl; // 简单异或加密
    }
    return fileBuffer;
}

Ending

上一篇