[转载]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
思想:
2        发送者使用接收者的Public Key对Session Key进行加密,这样只有指定的接收者能够获得正确的Session Key;接收者需要预先将自己的Public Key交给发送者;
2        只对Session Key进行非对称加密,而整个消息使用session key进行对称加密;
2        使用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
思想:
2        发送者首先产生消息的摘要(注意消息本身并不加密),然后用自己的private key对此摘要进行加密.
2        加密后的摘要作为数字签名,与原始消息一起传递给接收者.
2        接收者使用发送者的public Key的对摘要进行解密并计算收到消息的摘要,然后通过比较确认签名是否正确.
2        使用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://www.cnblogs.com/Acg-Check/p/5306506.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值