TrueCrypt原理与系统开发(1):TrueCrypt Format创建加密卷

一、概述
      TrueCrypt是唯一的一款支持Windows Vista/XP/2000/Linux开源的虚拟加密磁盘软件,能够创建和设置加密的虚拟磁盘镜像,虚拟磁盘可以与其它磁盘一样正常访问,内部所有文件都会自动加密,需要通过密码来进行访问,加密和解密都是实时的。
      TrueCrypt主要分为两部分;一部分是TrueCrypt Format,用来创建加密卷,另外一部分是TrueCrypt Mount,用来加载和卸载虚拟磁盘到分区等。

第一部分、TrueCrypt Format创建加密卷
      按照TrueCrypt Format创建加密卷的向导,一共会出现加密卷位置,加密算法、加密卷大小、加密卷密码、加密卷格式化等几个步骤,之后就会创建加密卷,创建完的加密卷就是制定的加密卷位置的那个文件了。

      因此我们知道TrueCrypt的核心就是创建加密卷函数了,该函数的作用就是接受上述的加密卷位置等几个参数,完成创建加密卷的过程,在TrueCrypt里的原型是

 

  1. int FormatVolume (char *volumePath,     
  2.                   BOOL bDevice,     
  3.                   unsigned __int64 size,     
  4.                   unsigned __int64 hiddenVolHostSize,     
  5.                   Password *password,     
  6.                   int cipher,     
  7.                   int pkcs5,     
  8.                   BOOL quickFormat,     
  9.                   BOOL sparseFileSwitch,     
  10.                   int fileSystem,     
  11.                   int clusterSize,     
  12.                   HWND hwndDlg,     
  13.                   BOOL hiddenVol,     
  14.                   int *realClusterSize,     
  15.                   BOOL uac );   
 

      下面我们来看下每个参数具体的含义

 

 参数 类型 含义 示例
 volumePath char * 用户选择的加密卷文件 C://1.txt
 bDevice BOOL 是否是一个分区卷 FALSE
 size unsigned __int64 加密卷大小(以byte为单位) 10*1024*1024
 hiddenVolHostSize unsigned __int64 隐藏加密卷大小(以byte为单位) 0
 password Password 用户输入的密码 123456
 cipher int 默认加密的算法 1
 pkcs5 int 哈希算法 DEFAULT_HASH_ALGORITHM
 quickFormat BOOL 是否是快速格式化 FALSE
 sparseFileSwitch BOOL   TRUE
 fileSystem int 文件系统 FILESYS_FAT
 clusterSize int   0
 hwndDlg HWND 传入的窗口句柄 NULL
 hiddenVol BOOL 是否是隐藏卷 FALSE
 realClusterSize int   512
 uac BOOL   FALSE

 

      下面我们来看具体的实例

 

  1. int Format(char* szFile, unsigned __int64 nsize, char* szPassword, HWND hwndDlg)    
  2. {    
  3.     char szFileName[TC_MAX_PATH+1]; /* The file selected by the user */    
  4.     char szDiskFile[TC_MAX_PATH+1]; /* Fully qualified name derived from szFileName */    
  5.     BOOL bDevice = FALSE;       /* Is this a partition volume ? */    
  6.     unsigned __int64 nVolumeSize = 0;       /* The volume size, in bytes. */    
  7.     unsigned __int64 nHiddenVolHostSize = 0;    /* Size of the hidden volume host, in bytes */    
  8.     Password volumePassword;            /* Users password */    
  9.     int nVolumeEA = 1;          /* Default encryption algorithm */    
  10.     int hash_algo = DEFAULT_HASH_ALGORITHM; /* Which PRF to use in header key derivation (PKCS #5) and in the RNG. */    
  11.     volatile BOOL bSparseFileSwitch = FALSE;    
  12.     volatile BOOL quickFormat = FALSE;  /* WARNING: Meaning of this variable depends on bSparseFileSwitch. */    
  13.                                    /* If bSparseFileSwitch is TRUE, this variable represents the sparse file flag. */    
  14.     volatile int fileSystem = 0;    
  15.     volatile int clusterSize = 0;    
  16.     BOOL bHidden;    
  17.     int realClusterSize;        /* Parameter used when determining the maximum possible size of a hidden volume. */    
  18.     int nStatus;    
  19.     char szTmp[16];    
  20.     int nMultiplier = 1024*1024;        /* Size selection multiplier.  */    
  21.     //strcpy(szDiskFile, "C://1.txt");    
  22.     //szDiskFile[8] = 0;    
  23.     strcpy(szDiskFile, szFile);    
  24.     szDiskFile[strlen(szFile)] = 0;    
  25.     strcpy(szTmp, "10");    
  26.     //nVolumeSize = _atoi64 (szTmp);    
  27.     nVolumeSize = nsize;    
  28.     nVolumeSize = nVolumeSize * nMultiplier;    
  29.     nHiddenVolHostSize = 0;    
  30.     //strcpy(volumePassword.Text, "123456");    
  31.     strcpy(volumePassword.Text, szPassword);    
  32.     volumePassword.Length = strlen (volumePassword.Text);    
  33.     quickFormat = FALSE;    
  34.     bSparseFileSwitch = TRUE;    
  35.     fileSystem = FILESYS_FAT;    
  36.     clusterSize = 0;    
  37.     bHidden = FALSE;    
  38.     realClusterSize = 512;    
  39.         
  40.     nStatus = FormatVolume (szDiskFile,//    
  41.         bDevice,//    
  42.         nVolumeSize,//1024*1024*10    
  43.         nHiddenVolHostSize,//0    
  44.         &volumePassword,//    
  45.         nVolumeEA,//    
  46.         hash_algo,//    
  47.         quickFormat,//FALSE    
  48.         bSparseFileSwitch,//TRUE    
  49.         fileSystem,//1    
  50.         clusterSize,//0    
  51.         hwndDlg,//    
  52.         bHidden,//FALSE    
  53.         &realClusterSize,//512    
  54.         FALSE);    
  55.     return 1;    
  56. }    
 

 

      在进行了一系列的参数设置后,即可完成加密卷的设置工作,下面就可以进行创建了,通过以上方式就可以实现自己的创建加密卷的方法。TrueCrypt对加密卷文件大小没有限制。虚拟的磁盘容量大小仅受加密卷所在磁盘的文件系统限制。例如,Fat32格式化的磁盘内,可以创建的加密卷文件不能超过4G。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值