首页 > 其他分享 >C语言实现文件加密

C语言实现文件加密

时间:2024-05-01 16:22:37浏览次数:14  
标签:文件 encrypt return C语言 char file 加密 hello

原理

加密文本,或加密二进制文件,可以选择的一个最小加密单元是单个字符(或者说,一个byte)。

将每个byte和31做异或运算,得到加密结果。再做一次异或则得以恢复原始数据。

加密文本 - 控制台程序

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

void encrypt(char* message)
{
    char c;
    while (*message)
    {
        *message = *message ^ 31;
        message++;
    }
}

int main()
{
    char msg[80];
    while (fgets(msg, 80, stdin))
    {
        encrypt(msg);
        printf("%s", msg);
    }
}

使用:

gcc encrypt_text.c -o encrypt_text
./encrypt_text 

加密二进制文件

加密代码实现:

int encrypt_binary_file(const char* sourcePath, const char* destPath)
{
    unsigned char buffer[1024];  // 读取数据的缓冲区
    size_t bytesRead;  // 实际读取的字节数

    // 打开源文件和目标文件
    FILE* sourceFile = fopen(sourcePath, "rb");
    if (sourceFile == NULL) {
        perror("Error opening source file");
        return 1;
    }

    FILE* destFile = fopen(destPath, "wb");
    if (destFile == NULL) {
        perror("Error opening destination file");
        fclose(sourceFile);
        return 1;
    }

    // 读取源文件,处理数据,写入目标文件
    while ((bytesRead = fread(buffer, 1, sizeof(buffer), sourceFile)) > 0) {
        for (size_t i = 0; i < bytesRead; i++) {
            buffer[i] ^= 31;  // 对每个字节进行异或操作
        }
        fwrite(buffer, 1, bytesRead, destFile);  // 写入处理后的数据到目标文件
    }

    // 关闭文件
    fclose(sourceFile);
    fclose(destFile);

    printf("File has been processed and saved successfully.\n");

    return 0;
}

int main(int argc, char** argv)
{
    if (argc != 3)
    {
        fprintf(stderr, "Usage: %s in_file out_file\n", argv[0]);
        return 1;
    }
    encrypt_binary_file(argv[1], argv[2]);

    return 0;
}

准备测试的二进制文件:

#include <stdio.h>
int main() { printf("hello world\n"); }
gcc hello.c -o hello

使用:

# 编译
gcc encrypt_bin_file.c -o encrypt_bin_file
# 加密
./encrypt_bin_file  hello encrypted_hello
# 解密
./encrypt_bin_file encrypted_hello decrypted_hello
# 运行
chmod +x ./hello
./hello

Reference

"Head First C" 嗨翻C语言 中译本 P182

标签:文件,encrypt,return,C语言,char,file,加密,hello
From: https://www.cnblogs.com/zjutzz/p/18169433

相关文章

  • 用python写一个 将指定目录下以及其下所有子目录下的srt文件复制一份并重命名带上文件
    代码:importosimportshutildefcopy_and_rename_files(src_directory,target_directory):#确保目标目录存在ifnotos.path.exists(target_directory):os.makedirs(target_directory)#遍历指定目录及其所有子目录forroot,dirs,file......
  • WAV音频文件按秒切片段
    wav音频文件按秒切片段 importwavedefsplit_wav_by_seconds(input_file,output_file,start_second,end_second):withwave.open(input_file,'rb')aswf:framerate=wf.getframerate()num_frames=wf.getnframes()num_channels......
  • 【Qt之JSON文件】QJsonDocument、QJsonObject、QJsonArray等类介绍及使用
    简述Qt5中包含了处理JSON的类,均以QJson开头(例如:QJsonDocument、QJsonArray、QJsonObject),在QtCore模块中,不需要额外引入其它模块。简述常用的JSON库JSON常用类简单的JSON对象简单的JSON数组复杂的JSON更多参考 常用的JSON库json.org 中介绍了......
  • ' for reading (没有那个文件或目录)en file `
     001、奇怪的报错:'forreading(没有那个文件或目录)enfile`[sy20223040796@admin1test]$ls##测试文件及命令test.bedtest.sh[sy20223040796@admin1test]$cattest.bed##测试文件1540000154000021542500154250021......
  • html,js代码编译,加密,代码一键打包软件,HTML转exe程序
    个人软件注意杀毒软件会报毒,,放行便可小尘web打包程序可以将整个web工程项目打包成一个exe程序运行不是打包浏览器内核应用,是代码打包软件,打包后和原来一样放在nginx类软件里运行下载地址https://download.csdn.net/download/rllmqe/88789653链接:https://pan.baidu.com/s/1HTql......
  • nginx配置文件
      userroot;worker_processesauto;error_log/var/log/nginx/error.lognotice;pid/var/run/nginx.pid;events{worker_connections1024;}http{include/etc/nginx/mime.types;default_typeapplication/octet-stream;......
  • 禅道文件大小限制-nginx 调整
    今天在使用禅道上传文件的时候发现了一个问题,我可以上传几十k的文件,但是上传不了大几M的文件,当文件过大的时候,一直卡在哪里,上传不了(使用的是开源版9.8.1)。在官方文档中可以看到需要调整php.ini中的post_max_size和upload_max_filesize值,然后重启apache即可生效:  #cd/......
  • 如何在aws cli中使用多个配置文件
    awscli使用中,可能会有在多个IAM账户中进行切换的需求,手动切换~/.aws/目录下的config和credentials是十分费力的事情。还好awscli本身就可以支持多个awscredentials配置多个profileawsconfigure时,加上--profile参数来命名不同的账户,依次输入accessid,accesskey,region......
  • 你的快递为何非要是快递,它也可以是“文件快递”
    你的快递为何非要是快递,它也可以是“文件快递”1、前言大家好,我是青阳。今天我给大家推荐一个文件快递柜,它可以让使用者像拿快递一样取文件!这个工具是FileCodeBox。2、介绍2.1基本介绍FileCodeBox是一个文件分享工具,它支持匿名口令分享文件和文本。它的主打特点是轻量简洁......
  • 使用Vue3在浏览器端进行zip文件压缩
    在前端开发中,我们时常需要处理文件上传和下载的功能。有时,用户可能希望将多个文件打包成一个zip文件以便于下载。今天,我将分享一个使用Vue3和JSZip库在浏览器端实现zip文件压缩的示例。首先,我们需要安装JSZip库。如果你使用的是npm,可以通过以下命令进行安装:npminstalljszip......