zoukankan      html  css  js  c++  java
  • openssl从内存中读取私钥进行签名

    麻痹的找了好久,真恶心!

    #include <stdio.h>
    #include <stdlib.h>
    #ifdef WIN32
    #include <windows.h>
    #endif
    #include "openssl/rsa.h"
    #include "openssl/pem.h"
    #include "Base64.h"
    #ifdef WIN32
    #pragma comment(lib,"User32.lib")
    #pragma comment(lib,"Advapi32.lib")
    #pragma comment(lib,"Gdi32.lib")
    #pragma comment(lib,"libeay32.lib")
    #pragma comment(lib,"ssleay32.lib")
    #endif
    
    // 私钥解密 
    std::string rsa_pri_decrypt(const std::string &cipherText, const std::string &priKey) 
    { 
    std::string strRet; 
    RSA *rsa = RSA_new(); 
    BIO *keybio; 
    keybio = BIO_new_mem_buf((unsigned char *)priKey.c_str(), -1); 
    
    // 此处有三种方法 
    // 1, 读取内存里生成的密钥对,再从内存生成rsa 
    // 2, 读取磁盘里生成的密钥对文本文件,在从内存生成rsa 
    // 3,直接从读取文件指针生成rsa 
    rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa, NULL, NULL); 
    
    int len = RSA_size(rsa); 
    char *decryptedText = (char *)malloc(len + 1); 
    memset(decryptedText, 0, len + 1); 
    
    // 解密函数 
    int ret = RSA_private_decrypt(cipherText.length(), (const unsigned char*)cipherText.c_str(), (unsigned char*)decryptedText, rsa, RSA_PKCS1_PADDING); 
    if (ret >= 0) 
    strRet = std::string(decryptedText, ret); 
    
    // 释放内存 
    free(decryptedText); 
    BIO_free_all(keybio); 
    RSA_free(rsa); 
    
    return strRet; 
    }

     参考地址:https://www.cnblogs.com/yuandaozhe/p/10114948.html

  • 相关阅读:
    G1垃圾收集器入门-原创译文
    Dubbo微容器(Cooma)详解
    Dubbo工程结构和Maven打包
    Greys学习笔记(未完待续)
    ES学习笔记
    CSS标准盒子模型和IE怪异盒子模型
    npm install 报错
    安卓手机scrollTop失效问题记录
    npm run dev报错
    severless扫盲
  • 原文地址:https://www.cnblogs.com/wainiwann/p/10986487.html
Copyright © 2011-2022 走看看