今天介绍如何使用CAPICOM进行对称加解密、非对称加解密和摘要运算。
对称加解密使用到的是EncryptedData组件,先上代码。
//加密
Dim message As New EncryptedData
message.Content =“12345678”
message.SetSecret “password”
message.algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_AES
message.algorithm.keylength = CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS
Dim EncryptedMessage As String
EncryptedMessage = message.encrypt
//解密
Dim message As New EncryptedData
message.SetSecret “password”
message.Decrypt EncryptedMessage
Dim outfile as String
outfile = message.Content
EncryptedData 组件的Content属性为待加密的原文,加密的第一步就是将原文赋值给Content;第二步调用SetSecret方法设置加密用的口令,EncryptedData 组件会根据这个口令生成对称密钥;第三步和第四步分别设置使用的对称加密算法和密钥长度。这里使用到了EncryptedData 组件的algorithm属性。algorithm属性的类型是Algorithm组件,顾名思义,它代表加密算法。Algorithm组件有两个属性:Name属性为算法名称,取值及代表的含义如下表。
KeyLength属性是密钥长度,取值及代表的含义如下表。
注意,如果选择DES或3DES算法,不用设置密钥长度,设置了也没用。参数设置完毕后,就可以调用EncryptedData 组件的Encrypt方法进行加密,此方法有一个EncodingType参数,代表加密结果的编码方式,此参数类型前文已经介绍过,不再赘述。缺省值为CAPICOM_ENCODE_BASE64。Encrypt方法返回值为加密结果。
解密时,先通过SetSecret设置口令,因为是对称加解密,所以口令要和加密口令一致。然后调用Decrypt方法解密,方法只有一个参数,即密文。Decrypt没有返回值,如果解密失败会抛出错误。解密成功后,访问Content属性即可得到明文。
很简单是吧,但EncryptedData 组件的加解密也有明显的缺点,一是不能指定CSP。前面说过,在Windows的CryptoAPI/CSP体系中,真正提供密码功能的是CSP。但微软应该是出于易用的考虑,在CAPICOM里不支持用户使用指定CSP进行对称加解密,而是使用缺省CSP。第二是不支持国产加密算法。
前面介绍过,在实际应用中,非对称加解密都是通过数字信封的形式实现的,所以,CAPICOM中实现非对称加解密的组件就叫做EnvelopedData。代码和对称加解密基本如出一辙。
//封装
Dim message As New EnvelopedData
message.Content = “12345678”
message. Recipients.Add UserCert
message.algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_AES
message.algorithm.keylength = CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS
Dim EncryptedMessage As String
EncryptedMessage = message.Encrypt
//解封
Dim message As New EnvelopedData
message.Decrypt EncryptedMessage
Dim outfile as String
outfile = message.Content
封装时同样要设置明文和加密算法,这里的加密算法是指对称密钥对明文加密时使用的算法。封装与加密最大不同在于多了一个Recipients属性,它是用来指定数字信封的接收者,实际上就是用来加密的证书(公钥)集合。这里用Recipients对象的Add方法增加了一个用户证书。最后调用EnvelopedData组件的Encrypt方法进行加密,同样有一个EncodingType参数,返回结果就是数字信封。
解封时调用Decrypt方法即可,如果失败会抛出错误;如果成功则同样访问Content属性得到明文。这里并不需要你设置证书或私钥来解密,CAPICOM会自动在计算机上寻找对应的私钥进行解密。
和对称加解密类似,CAPICOM的数字信封里对称加解密部分同样不能指定CSP,也不支持国产加密算法。另外非对称加解密部分只支持RSA算法。所以,如果想使用更复杂的功能以及更多的算法,只能直接调用底层API了。
最后介绍一下数字摘要运算。涉及到的组件是HashedData,
Dim hashobj As New HashedData
hashobj. Algorithm= CAPICOM_HASH_ALGORITHM_SHA_256
hashobj.hash “12345678”
Dim outfile as String
outfile = hashobj.Value
HashedData的Algorithm属性用来设置摘要算法,取值及代表的含义如下表。
调用hash方法进行摘要运算,参数为进行摘要运算的明文。此方法支持数据分组运算。摘要运算后,访问Value属性即可得到数字摘要结果。