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

 

 

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

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

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

 

int FormatVolume (char *volumePath, BOOL bDevice, unsigned __int64 size, unsigned __int64 hiddenVolHostSize, Password *password, int cipher, int pkcs5, BOOL quickFormat, BOOL sparseFileSwitch, int fileSystem, int clusterSize, HWND hwndDlg, BOOL hiddenVol, int *realClusterSize, 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

 

      下面我们来看具体的实例

 

int Format(char* szFile, unsigned __int64 nsize, char* szPassword, HWND hwndDlg) { char szFileName[TC_MAX_PATH+1]; /* The file selected by the user */ char szDiskFile[TC_MAX_PATH+1]; /* Fully qualified name derived from szFileName */ BOOL bDevice = FALSE; /* Is this a partition volume ? */ unsigned __int64 nVolumeSize = 0; /* The volume size, in bytes. */ unsigned __int64 nHiddenVolHostSize = 0; /* Size of the hidden volume host, in bytes */ Password volumePassword; /* Users password */ int nVolumeEA = 1; /* Default encryption algorithm */ int hash_algo = DEFAULT_HASH_ALGORITHM; /* Which PRF to use in header key derivation (PKCS #5) and in the RNG. */ volatile BOOL bSparseFileSwitch = FALSE; volatile BOOL quickFormat = FALSE; /* WARNING: Meaning of this variable depends on bSparseFileSwitch. */ /* If bSparseFileSwitch is TRUE, this variable represents the sparse file flag. */ volatile int fileSystem = 0; volatile int clusterSize = 0; BOOL bHidden; int realClusterSize; /* Parameter used when determining the maximum possible size of a hidden volume. */ int nStatus; char szTmp[16]; int nMultiplier = 1024*1024; /* Size selection multiplier. */ //strcpy(szDiskFile, "C://1.txt"); //szDiskFile[8] = 0; strcpy(szDiskFile, szFile); szDiskFile[strlen(szFile)] = 0; strcpy(szTmp, "10"); //nVolumeSize = _atoi64 (szTmp); nVolumeSize = nsize; nVolumeSize = nVolumeSize * nMultiplier; nHiddenVolHostSize = 0; //strcpy(volumePassword.Text, "123456"); strcpy(volumePassword.Text, szPassword); volumePassword.Length = strlen (volumePassword.Text); quickFormat = FALSE; bSparseFileSwitch = TRUE; fileSystem = FILESYS_FAT; clusterSize = 0; bHidden = FALSE; realClusterSize = 512; nStatus = FormatVolume (szDiskFile,// bDevice,// nVolumeSize,//1024*1024*10 nHiddenVolHostSize,//0 &volumePassword,// nVolumeEA,// hash_algo,// quickFormat,//FALSE bSparseFileSwitch,//TRUE fileSystem,//1 clusterSize,//0 hwndDlg,// bHidden,//FALSE &realClusterSize,//512 FALSE); return 1; }  

 

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

 

你可能感兴趣的:(Algorithm,算法,加密,byte,encryption,磁盘)