Microsoft CryptoAPI使用心得

Microsoft CryptoAPI使用心得
Microsoft CryptoAPI使用心得最近研究了一下MS CryptoAPI的用法,略有心得。如果需要使用非对称加密方案,MS CryptoAPI倒是一个不错的选择。
l         每个用户都可以在获取CSP(CryptAcquireContext)时通过指定Container的名称来创建自己的Key Container;也可以使用NULL参数获取缺省的Key Containner;通过Key Container用户可以创建或获取自己的公私钥对。
l         当用户首次使用自己的Key Container时需要创建自己的公私钥对(CryptGenKey)。注意:一旦创建了公私钥对,操作系统就会自动保存下来。
l         CRYPTAPI提供两种公私钥对:“交换公私钥对”和“数字签名公私钥对”。
Exchange Public/Private Key Pair
思想:
²        发送者使用接收者的Public Key对Session Key进行加密,这样只有指定的接收者能够获得正确的Session Key;接收者需要预先将自己的Public Key交给发送者;
²        只对Session Key进行非对称加密,而整个消息使用session key进行对称加密;
²        使用Exchang public/private key pair可以确保消息只能被指定的接收者读取;
发送者步骤:
1.      获取或创建指定的CSP(CryptAcquireContext)。
2.      获取或创建自己的Key Container(CryptGetUserKey或CryptGenKey)。
3.      创建一个hash对象(CryptCreateHash)。
4.      根据原始消息生成Hash值(CryptHashData)。
5.      从上述Hash值派生出session key(CryptDeriveKey)。
6.      导入接收者的public key(CryptImportKey).
7.      使用session key对消息进行加密同时使用接收者的public key对session key进行加密。
接收者步骤:
1.      获取或创建指定的CSP(CryptAcquireContext)。
2.      获取或创建自己的Key Container(CryptGetUserKey或CryptGenKey)。
3.      使用自己的private key对session key进行解密,然后使用session key对消息进行解密(CryptDecrypt)。
Digital Signature Key Pair
思想:
²        发送者首先产生消息的摘要(注意消息本身并不加密),然后用自己的private key对此摘要进行加密。
²        加密后的摘要作为数字签名,与原始消息一起传递给接收者。
²        接收者使用发送者的public Key的对摘要进行解密并计算收到消息的摘要,然后通过比较确认签名是否正确。
²        使用Digital Signature Key Pair可以确保消息来自指定的发送者,而不是别的冒充者;但它并不保护消息内容不被泄漏
发送者步骤:
1.      获取或创建指定的CSP(CryptAcquireContext)。
2.      获取或创建自己的Key Container(CryptGetUserKey或CryptGenKey)。
3.      导出自己的public key给接收端(CryptExportKey)。
4.      创建一个HASH对象(CryptCreateHash)。
5.      计算原始的消息的Hash值(CryptHashData)。
6.      使用自己的private key对Hash值进行加密(CryptSignHash)。
7.      将原始消息和签名后的Hash值发送给接收端。
接收者步骤:
1.       获取或创建指定的CSP(CryptAcquireContext)。
2.       导入发送者的public key(CryptImportKey)。
3.       创建一个HASH对象(CryptCreateHash)。
4.       计算原始的消息的Hash值(CryptHashData)。
5.       验证签名是否属于指定的发送者(CryptVerifySignature)。
总结:
使用MS CryptoAPI的非对称加密方案时,应根据实际情况选择正确的Key Pair。
l         Exchange Public/Private Key Pair适用于向特定接收者传输数据的情形,前提是发送者需要预知接收者的public key;
l         Digital Signature Key Pair适用于需要验证发送者身份的情形,前提是接收者需要预知发送者的public key。

转载于:https://my.oschina.net/ypimgt/blog/88427

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值