WEB开发网
开发学院软件开发VC 移动存储安全 阅读

移动存储安全

 2010-07-25 20:45:39 来源:WEB开发网   
核心提示:由于访问的是事实上已经存在的磁盘扇区,因此只能以OPEN_EXISTING标志设置dwCreationDisposition参数指出将要打开已经存在的文件(设备),移动存储安全(2),至于其他参数的使用与操作普通文件时的用法相同,使用的时候,这个只是对一个磁盘最初的512字节加密,后期可以通过对扇区的定位和计算,如果需

由于访问的是事实上已经存在的磁盘扇区,因此只能以OPEN_EXISTING标志设置dwCreationDisposition参数指出将要打开已经存在的文件(设备)。至于其他参数的使用与操作普通文件时的用法相同。

使用的时候,如果需要定位到某一个具体的扇区,可以使用SetFilePointer()函数:

DWORD SetFilePointer(HANDLE hFile,LONG lDistanceToMove,PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod);

在定位到要访问的扇区开始位置后就可以通过ReadFile()或WriteFile()函数实施相应的读写访问了,具体操作与文件读写并没有什么太大的差别。最后,在完成访问操作后以CloseHandle()关闭文件句柄释放资源,从而完成一次完整的磁盘扇区数据访问操作。

int ReadDisk(CString driver,unsigned char *Buf,long addr)
{
  HANDLE hDevice;
  BOOL bResult;
  DWORD bytesread;

  hDevice=CreateFile(driver,GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
  if(hDevice==INVALID_HANDLE_VALUE)
  {
    AfxMessageBox("Error!");
    return 0;
  }
  if(addr!=0)
  {
    SetFilePointer(hDevice,512*addr,NULL,NULL);
  }

  bResult=ReadFile(hDevice,Buf,512,&bytesread,NULL);
  if((bResult==FALSE)||(bytesread<512))
  {
    AfxMessageBox("Error!");
    return 0;
  }
  CloseHandle(hDevice);
  return 1;
}

3、用RC4加密算法对磁盘加密。

/* RC4加密,KEY是密钥,此处Key[]="MobileStorageSecurity",后期可以用户输入的密码作为密钥 */
RC4_KEY rc4_key;
build_rc4_key(Key,strlen((char*)Key),&rc4_key);
rc4_handler(MBRBuf,strlen((char*)MBRBuf),&rc4_key);

4、U盘插入计算机时的自动感知

LRESULT CRawDiskDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
  if ( WM_DEVICECHANGE == message && FALSE == bCopy )
  {
    //刷新设备列表
  }
  return CDialog::WindowProc(message, wParam, lParam);
}

后期改进

这样就必须要求在电脑上有这个程序,所以在后期采用同样的原理,将这个程序放在U盘里,在加密的时候实现对自身的屏蔽,这样大大提高程序的易用性。

可以让用户输入密码,将密码作为密钥去加密和解密。

这个只是对一个磁盘最初的512字节加密,后期可以通过对扇区的定位和计算,对目录表及数据加密。

本文配套源码

上一页  1 2 

Tags:移动存储 安全

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接