加密一个不是文本文件的文件怎么读入文件数据是读入二进制代码还是读入其他的什么代码,比如说加密一个mp3格式的音乐,怎么读入数据啊?我做了一个加密软件可以加密文本文件,但是不能加密其他格式的文件了,我用的是CFile类的函数读入:
CFile file;
char *buff;
file.open(filename,CFile::mode read)
filelength=file.GetLength();
buff=(char *)new(char [length+1])
file.read(buff,.....)
......
然后就对buff[]进行DES加密算法的操作了
代码语法可能不正确,反正就是这个模式,这样能加密任意文件吗?
请高手给一点指点,我做毕业设计啊,如果好心人给我有详细注释的vc代码,可以加密任何文件的代码
顺便说一下我用des加密

解决方案 »

  1.   

    上面的代码基本正确,不过需要些许修改:
    CFile readFile;
    readFile.Open(fileName, CFile::modeRead);
    DWORD fileLength = readFile.GetLength();
    char *fileBuffer;
    fileBuffer = new char[fileLength]; // 这里不用fileLength+1
         // 由于你把文件考虑为文本类型,所以想用'\0'作结尾符,是吧?
         // 如果你把文件考虑为任意类型,就不能用'\0'作结尾符,此时
         // 用长度来标志这个字符串的范围即可。
    if (fileBuffer != NULL)
    {
       DWORD readLength = readFile.Read(fileBuffer, fileLength);
       if (readLength != fileLength)
       {
          // handling error here (and return)
       }
    }
    // start encrying, for example:
    for(int n=0; n<fileLength; n++)
    {
       fileBuffer[n] = EncryChar(fileBuffer[n]);
    }
    CFile writeFile;
    if (!writeFile.Open(newFileName, CFile::modeCreate | CFile::modeWrite))
    {
       // handling error here (and return)
    }
    writeFile.Write(fileBuffer, fileLength);
      

  2.   

    为什么要用DWORD readLength呢?
    为什么不用int readLength呢?
    int DWORD 有什么区别?
      

  3.   

    只是你的文件不过2G,用哪个都一样……转换的时候注意就行了(sign/unsign)