ciw_blue吧 关注:22贴子:259
  • 2回复贴,共1

【源代码】文件加密器

取消只看楼主收藏回复

struct ExeFileInfo 
{
char szFileName[200]; 
};
struct ExeFilePWDInfo
{
char szFilePWD[200];
};

void GetFileName(char *szFileName, char *szPostfixName )
{
int nFileNameSize = strlen( szFileName );

for( int i = nFileNameSize - 1; i >= 0; i--)
{
if( szFileName[i] == '\\' )
{
break;
}
}
    
i= nFileNameSize - i - 1;     //文件后缀名的长度
    for( int j = 0; j < nFileNameSize; j ++ )
{
        szPostfixName[ j ] =  szFileName[ nFileNameSize - i + j ];
}
    szPostfixName[ j ] = 0;
    
}
void GetFilePostfix(char *szFileName, char *szPostfixName )
{
int nFileNameSize = strlen( szFileName );

for( int i = nFileNameSize - 1; i >= 0; i--)
{
if( szFileName[i] == '.' )
{
break;
}
}
    
i= nFileNameSize - i - 1;     //文件后缀名的长度
    for( int j = 0; j < nFileNameSize; j ++ )
{
        szPostfixName[ j ] =  szFileName[ nFileNameSize - i + j ];
}
    szPostfixName[ j ] = 0;
    
}

void EptText(char *szData )
{
int nEptKey[10] = {11, 15, 10, 13, 12, 11, 9, 8, 14, 11};   //加密Key
for( int i = 0; i < (int)strlen( szData ); i++)
{
        szData[ i ] += nEptKey[i % 10];
}
}
void Change(char *str )
{
for( int i = 0; i < (int)strlen( str ); i++ )
{
if( str[i] >= 'A' && str[i] <= 'Z' )
{
str[i] -= 'A' - 'a';
}
}
}


1楼2008-04-05 21:24回复
    {
    strcat( szEptExeFileName, ".exe.exe");
    }
    HANDLE hEptExe = CreateFile( szEptExeFileName, GENERIC_WRITE | GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_READ,
    NULL, CREATE_NEW, NULL, NULL);
    DWORD dwByte;
    WriteFile( hEptExe, lpEptExeData, SizeofResource( NULL, hEptExeRes), &dwByte, NULL );
    CloseHandle( hEptExe );
    HANDLE hFile = BeginUpdateResource( szEptExeFileName, false ); 

    if( (int)hFile != -1 )
    {

    //加密
    EptText( exeFileInfo.szFileName );
    //文件信息 
    UpdateResource( hFile, RT_RCDATA, MAKEINTRESOURCE( 1 ), 0, exeFileInfo.szFileName, sizeof( ExeFileInfo )); 

    strcpy( exePWDInfo.szFilePWD, PWD[0] );
    //加密
    EptText( exePWDInfo.szFilePWD );
    //文件密码
    UpdateResource( hFile, RT_RCDATA, MAKEINTRESOURCE( 2 ), 0, exePWDInfo.szFilePWD, sizeof( ExeFilePWDInfo )); 

    DWORD  dwByte;

    HANDLE hSrcFile = CreateFile( m_loadFile, GENERIC_WRITE | GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, OPEN_ALWAYS, NULL, NULL);

    DWORD lnSrcFileSize = GetFileSize(hSrcFile, NULL);

    if( lnSrcFileSize == 0 ) //是不是个空文件
    {
    DeleteFile( szEptExeFileName ); //删除加密器
    CloseHandle( hSrcFile ); 
    MessageBox( "文件是空的,加密失败.", "错误提示", MB_ICONERROR );
    return ; 

    if( lnSrcFileSize > 1024 * 30 * 1024 )
    {
    if( MessageBox( "文件大小超过了30M, 是否加密?" , "提示", MB_YESNO ) == IDNO )
    {
    return ; 
    }

    char *lpSrcData = new char[lnSrcFileSize + 1];
    memset( lpSrcData, 0, lnSrcFileSize + 1 );
    ReadFile( hSrcFile, lpSrcData, GetFileSize(hSrcFile, NULL), &dwByte, NULL );
    CloseHandle( hSrcFile );

    //加密
    EptText( lpSrcData );
    UpdateResource( hFile, RT_RCDATA, MAKEINTRESOURCE( 3 ), 0, lpSrcData, dwByte );
    delete[] lpSrcData;
    EndUpdateResource( hFile, false );


    UpdateData();


    2楼2008-04-05 21:24
    回复
      if( m_isDelSrcFile == TRUE ) //是否要删除原来的文件
      {
      if( MessageBox( "真的要删除原文件吗?", "提示", MB_YESNO | MB_ICONWARNING ) == IDYES )
      {
      if( !DeleteFile(m_loadFile.GetBuffer( 0 )) )
      {
      MessageBox( "删除原文件错误,请手动删除." );
      }
      }
      }

      char szMsgBox[100];
      sprintf( szMsgBox, "%s ,已经加密成功.", m_loadFile.GetBuffer( 0 ) );
      MessageBox( szMsgBox, "提示" );


      }

       }
       else
       {
       MessageBox( "要加密的文件不存在,请重新加载文件." , "错误提示", MB_ICONERROR );
       }
       
       
      }
      else

      MessageBox( "请输入2次相同的密码." , "错误提示", MB_ICONERROR );
      }
      }


      3楼2008-04-05 21:24
      回复