zoukankan      html  css  js  c++  java
  • CryptAPI 数字签名 与 Openssl 验证签名

        这段时间要实现一个认证协议,分为客户端和服务器端,客户端使用windows操作系统,服务器端使用linux操作系统,在客户端下(windows),使用windows证书库中的签名证书对消息进行签名(使用windows的crypto库),然后在服务器端(linux)下,使用OpenSSL库对签名值进行验证~~

    客户端使用函数接口:

    CertOpenSystemStore  —  打开系统证书库

    CryptUIDlgSelectCertificateFromStore  — 从证书库中选择证书,获取证书上下文

    CertGetCertificateContextProperty  — 获取属性CERT_KEY_PROV_INFO_PROP_ID对应CRYPT_KEY_PROV_INFO结构,得到证书对应的密钥容器名

    CryptAcquireContext — 连接密钥容器

    CryptCreateHash — 创建Hash对象

    CryptHashData — 得到Hash值

    CryptSignHash — 对Hash值进行签名,得到签名值

    服务器使用函数接口:

    d2i_X509_bio  — 从编码后的证书生成x509证书

    X509_get_pubkey — 从x509证书中获取公钥

    EVP_MD_CTX_init  — 初始化ctx

    EVP_VerifyInit_ex — 对签名进行验证

    EVP_VerifyUpdate

    EVP_VerifyFinal

    这里有一个关键点:crypto库生成的签名值要经过反序后才能由OpenSSL库进行验证~~切记~

     

  • 相关阅读:
    Android ViewPager用法小结
    HDU1212 Big Number 【同余定理】
    1051. Pop Sequence (25)
    FFmpeg源码结构图
    oracle访问不同用户的表不添加用户名前缀
    window7开启Administrator账户
    Window下对nodejs多版本管理GNVM
    基于Centos7.5搭建Docker环境
    grep与孪生兄弟egrep差异
    Linux编译步骤概述
  • 原文地址:https://www.cnblogs.com/adylee/p/3613586.html
Copyright © 2011-2022 走看看