[转载]Microsoft CryptoAPI使用心得

转载自此git

 

最近研究了一下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
相关文章
相关标签/搜索