• 第四课:文件操作【解密】


    小编个人觉得,一个文件加密好后,想要再解密,就得了解其构造,以及写法。

    而小编这里呢,写的文件很粗糙,也很简单,只是将每个字节后添加一些东西,既然知道了写法构成,那么就好办了。

    声明一个全局解密函数如下:

    //解密函数
    int DesEnc_raw(char* Buffer, size_t* size, char* Buffer2, size_t& size2);

    下面直接跳过加密数据,就是原数据了,将其提取出来存入Buffer2中,而字节数存入size2中。

    //解密
    int DesEnc_raw(char* Buffer, size_t* size, char* Buffer2, size_t& size2)
    {
        int number = *size;
        int ret = -1;
        //首先判断带入加密后的字符串是否为空,或者它的字节数是否为0
        if (Buffer == NULL || number ==0)
        {
            cout << "传入的数据为空" << endl;
            system("pause");
            return ret;
        }
        //char* bufftemp = new char [number/4];
        int j = 0;
        for (size_t i = 0;i < number;i+=4)
        {
            //cout << Buffer[i] << "	";这里可以看看加密后的文件数据具体化
                //因为知晓了加多少个字节数据,所以直接跳过加密数据
            *(Buffer2+j) =  Buffer[i];
                
                j++;
        }
        *(Buffer2 + j) = '';
        size2 = j;
        return 0;
    }
    {
      //加密操作
      ...   
      //解密操作
      writeLength = fwrite(raw_name, 1, raw_len, f_Writed);
      //为了以防万一,可以加个判断
      //判断当写入时的字节数和读出数据的字节数,两个数据完全不同,则爆出提示错误,退出
        if (readLength != writeLength)
        {
            cout << "写入文件失败,请检查是否磁盘溢满!" << endl;
    
            return;
        }
    }

    这样就是一套小编完整的加解密文件,当然最后别忘记关闭流对象

    //关闭流对象
    if (f_Writed || f_Read)
    {
         fclose(f_Writed);
         fclose(f_Read);
    }

    运行之后的结果就是,在Mr.jie文件中,保存了Mr.she文件内的数据。

    条条英符铸平凡,行行代码显乾坤;
  • 相关阅读:
    算法笔记4
    算法笔记3
    SQLServer 两种分页方式
    Git 使用笔记
    Docker MongoDB 笔记
    Abp vNext 修改Identity模块用户管理界面的坑
    CentOS安装MariaDB
    Visio修改页边距
    在 PowerDesigner 导入Excel中的表结构
    Uploadify上传失败,提示 2156 SecurityError Error #2156 null的解决办法
  • 原文地址:https://www.cnblogs.com/VisiousDragon/p/13899333.html
Copyright © 2020-2023  润新知