博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件加密二进制版本
阅读量:5739 次
发布时间:2019-06-18

本文共 3097 字,大约阅读时间需要 10 分钟。

这个 还希望如果有高玩的话,帮忙看一下,不知道为什么实现不了非文本文件的加解密。

我觉得问题就在下面标红加下划线的地方。分别在 code.c 跟 decode.c里面。

main.c

#include 
#include
#pragma warning(disable:4996)#include "code.h"#include "decode.h"void workflow(const int argc, const char **argv);void judgeCodeOrDecode(const int argc, const char **argv);/** 二进制文件加解密,模仿之前那个高级的版本做一个,这次要求不同的代码块要分开。 最后一个参数是一个八进制的码。这个密码强度感觉比之前那个数字的要牛。但是不知道是否经得起检验试试看吧。如果一个几十Mb的东西没问题,估计就没问题了。*/int main(int argc,char **argv){ workflow(argc,argv); return 0;}void workflow(const int argc, const char **argv){ if (argc < 5){ printf("参数过少,需要5个参数\n"); } else if (argc>5){ printf("参数过多,需要5个参数\n"); } else { //justCopy(); judgeCodeOrDecode(argc,argv); }}void judgeCodeOrDecode(const int argc, const char **argv){ if (strcmp(argv[3], "code") == 0){ codeFile(argv); } else if (strcmp(argv[3], "decode") == 0){ decodeFile(argv); } else{ printf("请输入 code 或者 decode,来进行 编码 或者 解码 操作。"); }}

code.h

#ifndef _CODEH#define _CODEHvoid coding(char *, const int, const char *key);void codeFile(const char **argv);#endif

code.c

#include 
#include
#pragma warning(disable:4996)/** 实质上就是 一个文件写入操作。*/void coding(char *,const int,const char *key);void codeFile(const char **argv);/** argv[0]是exe名字. argv[1]是 文件的第一个名字。 argv[2] 是文件的第二个名字。 argv[3] 选择是否编解码 argv[4] 秘钥 这个地方有点儿问题 先不做那么麻烦的。先弄成10进制数字吧。 所以 这里code需要345.*/void codeFile(const char **argv){ FILE *src = fopen(argv[1], "rb"); if (src==NULL){ printf("加密失败,源文件未找到\n"); } FILE *dest = fopen(argv[2], "wb"); char buf[1024 * 4] = { 0 }; while (!feof(src)){ size_t size = fread(buf, 1, sizeof(buf), src); coding(buf,size,argv[4]); fwrite(buf, 1, size, dest); }}void coding(char *str,const int len,const char *key){ int i = 0; int mykey = atoi(key); //printf(mykey); //getchar(); for (; i < len; i++){ str[i] += mykey; }}

decode.h

#ifndef _DECODEH#define _DECODEHvoid decoding(char *, const int, const char *key);void decodeFile(const char **argv);#endif

decode.c

#include 
#include
#include
#pragma warning(disable:4996)/**实质上就是 一个文件写入操作。*/void decoding(char *, const int, const char *key);void decodeFile(const char **argv);/**argv[0]是exe名字.argv[1]是 文件的第一个名字。argv[2] 是文件的第二个名字。argv[3] 选择是否编解码argv[4] 秘钥 这个地方有点儿问题 先不做那么麻烦的。先弄成10进制数字吧。所以 这里code需要345.*/void decodeFile(const char **argv){ FILE *src = fopen(argv[1], "rb"); if (src == NULL){ printf("解密失败,源文件未找到\n"); } FILE *dest = fopen(argv[2], "wb"); char buf[1024 * 4] = { 0 }; while (!feof(src)){ size_t size = fread(buf, 1, sizeof(buf), src); decoding(buf, size, argv[4]); fwrite(buf, 1, size, dest); }}void decoding(char *str, const int len, const char *key){ int i = 0; int mykey = atoi(key); //printf(mykey); //getchar(); for (; i < len; i++){ str[i] -= mykey; }}

 

转载于:https://www.cnblogs.com/letben/p/5252200.html

你可能感兴趣的文章
Linux中文件颜色所代表的属性和颜色
查看>>
Redrain duilib中事件委托存在的问题
查看>>
43、我的C#学习笔记9
查看>>
字符串的简单操作
查看>>
C#新功能--命名参数与可选参数
查看>>
strtok和strtok_r
查看>>
维辰超市:借助云商城成功转型新零售
查看>>
web.xml中<load-on-start>n</load-on-satrt>作用
查看>>
【算法】CRF
查看>>
windows 8 微软拼音输入法
查看>>
Windows UI风格的设计(7)
查看>>
SQL中使用WITH AS提高性能 使用公用表表达式(CTE)简化嵌套SQL
查看>>
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
灾难拯救——让软件项目重回轨道
查看>>
mysql中主外键关系
查看>>
我的友情链接
查看>>
让你快速上手的Glide4.x教程
查看>>
浮动和清除(闭合)浮动
查看>>
微信小程序注册流程
查看>>