zoukankan      html  css  js  c++  java
  • 文件加密二进制版本

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

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

    main.c

    #include <stdio.h>
    #include <string.h>
    #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个参数
    ");
        }
        else if (argc>5){
            printf("参数过多,需要5个参数
    ");
        }
        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 _CODEH
    
    void coding(char *, const int, const char *key);
    void codeFile(const char **argv);
    
    #endif

    code.c

    #include <stdio.h>
    #include <stdlib.h>
    #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("加密失败,源文件未找到
    ");
        }
        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 _DECODEH
    
    void decoding(char *, const int, const char *key);
    void decodeFile(const char **argv);
    
    #endif

    decode.c

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #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("解密失败,源文件未找到
    ");
        }
        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;
        }
    }
  • 相关阅读:
    TCP/IP学习笔记:组播
    使用WITH AS 优化SQL
    帮盖尔优化SQL子查询优化的经典案例
    帮盖尔优化SQL
    子查询里面有树形查询,子查询选择使用in/exists需要特别留意
    [Linux] 服务器性能调优(CPU绑定)
    TCP/IP学习笔记:RIP
    TCP/IP学习笔记:路由与BGP
    利用Merge代替复杂的UPDATE语句
    android开机启动流程说明
  • 原文地址:https://www.cnblogs.com/letben/p/5252200.html
Copyright © 2011-2022 走看看