Android 音视频入门之C入门序列(十一)- 文件加解密思路

加密思路

加密 === 破坏文件
方式一: 全部加密, 对每一个字节都处理
方式二: 部分加密,把某一部分内容拿出来处理
如何破坏呢,可以最简单的思路,就是把取出来的数据异或某一个值。

解密思路

解密 === 将破坏过的文件还在原
在加密思路中异或的值再异或一次

代码实现

 char *fileNameStr = "D:\\Temp\\IMG.png"; // 来源
 char *fileNameStrEncode = "D:\\Temp\\IMG_encode.png"; // 加密后的目标文件
 FILE *file = fopen(fileNameStr, "rb");
 FILE *fileEncode = fopen(fileNameStrEncode, "wb");
 if (!file || !fileEncode) {
     printf("文件打开失败,路径%s的文件有问题", fileNameStr);
     exit(0); // 退出程序
 }

// 加密
int c; // 接收读取的值   fgetc(file) 这个函数的返回值EOF = end of file
while ((c = fgetc(file))!= EOF) {
	// 开始加密流程并这写入数据
	fputc(c ^ 5, fileEncode);  //写入到fileEncode里
}
fclose(file);
fclose(fileEncode);

// 解密
char *fileName1 = "D:\\Temp\\IMG_encode.png"; // 来源
char *fileNameStrDecode = "D:\\Temp\\IMG_Decode.png"; // 解密后的目标文件
FILE *file1 = fopen(fileName1, "rb");
FILE *fileDecode = fopen(fileNameStrDecode, "wb");
if (!file1 || !fileDecode) {
    printf("文件打开失败,路径%s的文件有问题", fileNameStr);
    exit(0); // 退出程序
}
int c1;
while ((c1 = fgetc(file1)) != EOF) {
    // 开始做解密操作
    fputc(c1 ^ 5, fileDecode);  //写入到fileEncode里
}
fclose(file1);
fclose(fileDecode);

加解密设置简单密码实现

#include <stdio.h>
#include <stdlib.h>
#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif

int main() {
    char *fileNameStr = "D:\\Temp\\IMG.png"; // 来源
    char *fileNameStrEncode = "D:\\Temp\\IMG_encode.png"; // 加密后的目标文件
    FILE *file = fopen(fileNameStr, "rb");
    FILE *fileEncode = fopen(fileNameStrEncode, "wb");
    if (!file || !fileEncode) {
        printf("文件打开失败,路径%s的文件有问题", fileNameStr);
        exit(0); // 退出程序
    }

    // 密钥
    char *password = "123456";

    // todo 加密
    int c;// 接收读取的值   fgetc(file) 这个函数的返回值EOF = end of file
    int index = 0;
    int pass_len = strlen(password);
    while ((c = fgetc(file)) != EOF) {
        // 开始做加密操作
        char item = password[index % pass_len];
        index++;
        printf("item%c\n", item);
        fputc(c ^ item, fileEncode);  //写入到fileEncode里
    }

    fclose(file);
    fclose(fileEncode);

    char *fileName1 = "D:\\Temp\\IMG_encode.png"; // 来源
    char *fileNameStrDecode = "D:\\Temp\\IMG_Decode.png"; // 解密后的目标文件

    FILE *file1 = fopen(fileName1, "rb");
    FILE *fileDecode = fopen(fileNameStrDecode, "wb");
    if (!file1 || !fileDecode) {
        printf("文件打开失败,路径%s的文件有问题", fileNameStr);
        exit(0); // 退出程序
    }


    int c1;
    index = 0;
    while ((c1 = fgetc(file1)) != EOF) {
        // 开始做解密操作
        char item = password[index % pass_len];
        index++;
        fputc(c1 ^ item, fileDecode);  //写入到fileEncode里
    }

    fclose(file1);
    fclose(fileDecode);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值