TCipher类所支持的加密算法是基于数据块的对称加密算法。在使用类进行处理前,首先应设置Mode属性,指定算法种类。
对称加密算法加密和解密使用相同的密钥(key)和初始化向量(IV)。初始化向量的作用在于:TCipher提供的多数加密算法为了提高加密强度,在密文的块与块之间实现了一定的关联,初始化向量为第一块设定初始关联,如果初始化向量不正确,数据会出现错误。不同算法的密钥和初始化向量的长度是不同的,TCipher提供了KeyLength和IVLength可以取得密钥和初始化向量的长度。在加密和解密前可以通过Key和IV属性设置密钥和初始化向量,因为key和IV都是二进制的,因此应使用hex字符串进行设置:
cipher_obj:=CreateObject('TCipher', 2); //使用DES_CBC算法
//测试使用key和IV进行加密
key8:='0102030405060708';
iv8:='FFFFFFFFFFFFFFFF';
cipher_obj.key:=key8;
cipher_obj.iv:=iv8;
因为key和IV是二进制的,而且在有的算法中较长,在某些应用场景中不便于读取和记忆。TCipher还提供了Password属性。通过Password属性可以方便地设置key和IV,TCipher类会根据设置的Password字符串,通过哈希算法计算出一个key和IV,这样加解密的双方就可以用一个Password实现加密和解密了。示例:
filename:='d:\\a.txt;
size:=filesize("",filename); //获取文件大小
ReadFile(rwraw(),"",filename,0,size,file_str);
//对称加密算法类
cipher_obj:=CreateObject('TCipher', 2); //使用DES_CBC算法
cipher_obj.Password:='Tinysoft'; //设定密码
des_cbc_str:=cipher_obj.Encrypt(file_str);//加密字符串
orig_des_cbc:=cipher_obj.Decrypt(des_cbc_str);//解密字符串
文件加解密过程中src_alias和dest_alias参数用于指定文件的目录别名。下面是文件加解密示例(本地执行):
cipher_obj:=CreateObject('TCipher', 2); //使用DES_CBC算法
cipher_obj.Password:='Tinysoft'; //设定密码
//加密文件
cipher_obj.EncryptFile('', 'd:\\test.bmp', '', 'd:\\test.bmp.enc');
//解密文件
cipher_obj.DecryptFile('', 'd:\\test.bmp.enc', '', 'd:\\test_dec.bmp');