您的位置:首页 > 其它

CAPICOM开发指引——对称加解密、数字信封及数字摘要

2020-07-04 22:43 12 查看


今天介绍如何使用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属性即可得到数字摘要结果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐