zoukankan      html  css  js  c++  java
  • Crypto API加密通信流程

    应用程序使用Crypto API进行加密通信的一般步骤如下:

    1,include wincrypt.h

    2,调用CryptAcquireContext()获得某个CSP模块中的密钥容器(key container)的一个句柄;

    3,发送方使用CryptImportKey()将接受方的证书导入CSP中,从而获得接收方的公钥;

    4,发送方式用CryptGenKey()随机产生一个会话密钥,且用对方的公钥对会话密钥进行加密,

    用CryptExportKey()将加密后的会话密钥导出并且发给对方;

    5,接收方收到会话密钥后,用自己的私钥调用CryptImportKey(),将会话密钥解出来;

    6,发送方用会话密钥调用CryptEncrypt()加密数据,并且发送给对方;

    7,接收方收到加密后的数据,用会话密钥调用CryptDecrypt(),对数据进行解密;

    8,通信完毕,调用CryptDestroyKey()释放任何密钥句柄,再用CryptReleaseContext()释放CSP句柄。

    使用Crypto API进行数字签名及验证的一般步骤如下:

    1,调用CryptAcquireContext()获得某个CSP模块中的密钥容器(key container)的一个句柄;

    2,签名者调用CryptGerUserKey()得到用于签名的密钥,并用CryptExportKey()降其中的公钥输出,

    以便收到数字签名的人对自己的签名进行验证;

    3,签名者用CryptCreateHash()和CryptHashData()计算需要签名的数据散列值;

    4,签名者用私钥调用CryptSignHash()给数据的散列值加上自己的签名;

    5,负责验证签名的人在收到签名者发来的公钥、数据及签名后,先用CryptImportKey()将签名者的公钥导入密钥容器中;

    6,验证者再签名者那样用CryptCreateHash()和CryptHashData()计算数据的散列值;

    7,验证者用CryptVerifySignature()检查签名是否有效;

    8,调用CryptDestroyHash()释放散列值对象,并调用CryptReleaseContext()释放最初的CSP句柄资源。

  • 相关阅读:
    关于webpack升级过后不能打包的问题;
    数组的一些理解
    .NET(C#):使用Win32Exception类型处理Win32错误代码
    托管代码和非托管代码
    托管DLL和非托管DLL的区别
    C#实现Dll(OCX)控件自动注册的两种方法(转)
    Com组件和Dll文件区别
    C#创建COM组件
    ajaxFileUpload插件上传文件 返回 syntaxError :unexpected token
    jquery插件--ajaxfileupload.js上传文件原理分析
  • 原文地址:https://www.cnblogs.com/james1207/p/3366089.html
Copyright © 2011-2022 走看看