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

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

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

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

//解密函数
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文件内的数据。

条条英符铸平凡,行行代码显乾坤;
原文地址:https://www.cnblogs.com/VisiousDragon/p/13899333.html