私钥加密的部分内容,需要用公钥解密下面的实例代码,由于私钥加密后的字符串有不可打印字符,所以程序里面进行了base64,要用的时候先解dec base64

再传递给函数 进行解密

#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;
}

// 公钥解密
std::string rsa_pub_decrypt(const std::string &cipherText, const std::string &pubKey)
{
std::string strRet;
RSA *rsa = RSA_new();
BIO *keybio= BIO_new_mem_buf((unsigned char *)pubKey.c_str(), -);
rsa=PEM_read_bio_RSA_PUBKEY(keybio,&rsa,NULL,NULL); int len = RSA_size(rsa);
char *decryptedText = (char *)malloc(len + );
memset(decryptedText, , len + ); // 解密函数
int ret = RSA_public_decrypt(cipherText.length(), (const unsigned char*)cipherText.c_str(), (unsigned char*)decryptedText, rsa, RSA_PKCS1_PADDING);
if (ret >= )
strRet = std::string(decryptedText, ret); // 释放内存
free(decryptedText);
BIO_free_all(keybio);
RSA_free(rsa); return strRet;
} int main(int narg,char** args)
{
string pubKey="\
-----BEGIN PUBLIC KEY-----\n\
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptoreKuW1O+Bb1u+O0LQ\n\
NAiaj5i0gbqi5uHCfcTxPIScoeidR/FaPFWpG3mHUCd7SfPKlSQ4H4FGwqkPrAJ8\n\
tb6vfNAY7UPlStaWwCASBBBeHRIFySDIFQnIeXTcZqKgvCAkM3kudyKGMGfZyU6v\n\
SUCMUJbvtIKrSBpPFOaPF1EjfsTpcRjRwNUxjInvxyOmegdLSgg/NNV9AxUSpGX4\n\
Fs5j3W4u4bfgoH6WiI7QLeVWpw+ZcynndtihPa2Y5rKgTDq1IYnniaYy+bTlWMPC\n\
us9AjL0qaM0oXKzUByIeA8cWQR99ewSLsEaa7mhpUZ1jg+fDQEqYfgvenfcOe5bn\n\
NQIDAQAB\n\
-----END PUBLIC KEY-----\n";
string encStr="TgaNSiG6yPkKql3pIW9310IsRpcppl4SIt12kdP3ZwR0wWj65P3I3YCaSrb7+lmJ9N\
mpTmHHzwgvTQN3zM+IRpjQr1iAJZ0C/+2uM0WkPwbZhvlzcr4iZFOfhe6CbPGibu1\
+pRYdkkxgvXT3/0D4hrtzOxMXVYzBLjfd7xXRfVTXGI7FlBGfq6/W+bg3DE3BQbdS\
07eBBRKQ1Jbl/LPIQP40FK5qdvTDeWTG0m/mLRfpavbIw4pMKnc7845xU9ZZVmxcv\
14O7AJYmJat72mGzDVpafx+65aanLMIydSY+dly62XeSRd5ghd1fSaTHlVN4h59YY\
qNPXGxFKTrMvPUDg==";
Base64 base;
string encStr2=base.Decode(encStr.c_str(),encStr.length());
string decStr=rsa_pub_decrypt(encStr2,pubKey);
printf("---%s---\n",decStr.c_str());
system("pause");
return ;
}

下面的私钥和公钥 以及加密字符串

秘钥位数2048 秘钥格式PKCD#

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptoreKuW1O+Bb1u+O0LQ
NAiaj5i0gbqi5uHCfcTxPIScoeidR/FaPFWpG3mHUCd7SfPKlSQ4H4FGwqkPrAJ8
tb6vfNAY7UPlStaWwCASBBBeHRIFySDIFQnIeXTcZqKgvCAkM3kudyKGMGfZyU6v
SUCMUJbvtIKrSBpPFOaPF1EjfsTpcRjRwNUxjInvxyOmegdLSgg/NNV9AxUSpGX4
Fs5j3W4u4bfgoH6WiI7QLeVWpw+ZcynndtihPa2Y5rKgTDq1IYnniaYy+bTlWMPC
us9AjL0qaM0oXKzUByIeA8cWQR99ewSLsEaa7mhpUZ1jg+fDQEqYfgvenfcOe5bn
NQIDAQAB
-----END PUBLIC KEY----- -----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCm2it4q5bU74Fv
W747QtA0CJqPmLSBuqLm4cJ9xPE8hJyh6J1H8Vo8VakbeYdQJ3tJ88qVJDgfgUbC
qQ+sAny1vq980BjtQ+VK1pbAIBIEEF4dEgXJIMgVCch5dNxmoqC8ICQzeS53IoYw
Z9nJTq9JQIxQlu+0gqtIGk8U5o8XUSN+xOlxGNHA1TGMie/HI6Z6B0tKCD801X0D
FRKkZfgWzmPdbi7ht+CgfpaIjtAt5VanD5lzKed22KE9rZjmsqBMOrUhieeJpjL5
tOVYw8K6z0CMvSpozShcrNQHIh4DxxZBH317BIuwRpruaGlRnWOD58NASph+C96d
9w57luc1AgMBAAECggEAQu9U7yTO7n9iinzgdL+Z7LXi42ZcS4rG3R6GOpQuPpvo
hh9eMUVGcNvgalA3k1UzZXhytaABD8p5y4+s5NFenD5yAf0tcsmBC6PIeCylbZHv
X3QidAw9mAsDrI3P+TCWkMHIJAoiNNLZyENxIAv7z8QgRhg281BUTCmZvgW8M5rI
S8/8MqLi1DPFIJ/AbOLS9MXHinsNKk0sn5KN01I4hwfM0b+E95+heWZV8xxrWoNP
ssMf9XFnddjPvHIkHG9zNdjvmbgyuj4puzB3tBKtd8pZlzQj4A7uSOWRVkr9/kFZ
CLMG7W6B3XCtnutAF16pGQxwgqjkLH73RSqTvJVdZQKBgQDXv8qeDRROPRxmU6u+
Zz+wK32iyocd+eBwhuc/TnEOBqlzF/HySVSqPIEzIXs48qmMSYGI8Ab/Qy1hB4Hl
DZqglx4aQ3K31QCIzzINulDxj/msYNRp+hFV2UCrZN/ScNYymdj+kdIt8brM1RRl
hZjVcWwH1Iv8MZ12ALaEclkjtwKBgQDF+w2m4oWsPApq1vs4Cc+61gh2W9xP6Cij
FShyXU7Ms/qQ2F9C+0DC6ssGNC0+YV4aK6xSE6vhexGpJYf08fT/RrDW3JLTGdFC
HvX8QTEf9LoCV5y7mdoNirKV3eVcYMCUkVFEyQfXUDz2bKt+VU36ep395UUzCTRZ
IYD9kOsEcwKBgENZIXzZBF+v/++JavFS9bSevudUZX1cBU3bLtC6QdxpA/hjnylM
7tr9bC9z4i1Sws6CG6eNlgGVDNNfLpM7/erngYQdTfBI05PhafSTFrVxhjTjPSuf
3k14NhHKuXvNsW+2SuCc0Il7Dh7m3Skb3Suz7k87cD9XlZnCezc5Is5dAoGAAVde
FE9ckHonp+mk8hA+9AkXLZYZvADapaAzEfNH4WMmw2xz2MRS//8POQ+Jbu7B8HNz
S2sOswxeZkL21NX+zuvvrsT3ya5XGJeVGwxmBM1npTRqv2qfa5AQ/arvLt0I8Pi7
EDg8cVz9zL2Xu9dgG95Qy7ON8HaTgDcV5KHitbkCgYEA1a/mgASIJRP38FUcl1OB
CebYFOMicyjw0LbxfGZSThpHnSxPCI93iw6XbOrwrcsDe67GPbkT/mknNKGWXiof
goLgLkVS5TXSxVO786YqNwWE2pB8+phhcFtb1wYyTnMXIo8a+KsZ0tWTO4pvlIsz
/4e1njkFYpOoRHjczHhA1Ag=
-----END PRIVATE KEY----- 加密前字符串
73a90acaae2b1ccc0e969709665bc62f
加密后字符串
TgaNSiG6yPkKql3pIW9310IsRpcppl4SIt12kdP3ZwR0wWj65P3I3YCaSrb7+lmJ9NmpTmHHzwgvTQN3zM+IRpjQr1iAJZ0C/+2uM0WkPwbZhvlzcr4iZFOfhe6CbPGibu1+pRYdkkxgvXT3/0D4hrtzOxMXVYzBLjfd7xXRfVTXGI7FlBGfq6/W+bg3DE3BQbdS07eBBRKQ1Jbl/LPIQP40FK5qdvTDeWTG0m/mLRfpavbIw4pMKnc7845xU9ZZVmxcv14O7AJYmJat72mGzDVpafx+65aanLMIydSY+dly62XeSRd5ghd1fSaTHlVN4h59YYqNPXGxFKTrMvPUDg==

C++利用openssl进行公钥解密的更多相关文章

  1. 利用openssl进行RSA加密解密

    openssl是一个功能强大的工具包,它集成了众多密码算法及实用工具.我们即可以利用它提供的命令台工具生成密钥.证书来加密解密文件,也可以在利用其提供的API接口在代码中对传输信息进行加密. RSA是 ...

  2. .net core中使用openssl的公钥私钥进行加解密

    这篇博文分享的是 C#中使用OpenSSL的公钥加密/私钥解密 一文中的解决方法在 .net core 中的改进.之前的博文针对的是 .NET Framework ,加解密用的是 RSACryptoS ...

  3. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例

    前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密  私加 ===================== ...

  5. linux以下C 利用openssl的AES库加密,解密

    OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是所有支持或者是部分支持. 返回值:"aes(full)" ...

  6. Java中使用OpenSSL生成公钥私钥进行数据加解密

    当前使用的是Linux系统,已经安装OpenSSL软件包. 一.使用OpenSSL来生成私钥和公钥1.执行命令openssl version -a 验证机器上已经安装openssl $ openssl ...

  7. openssl rsa 加解密

    <h4>1.openssl进行rsa加密解密</h4>首先介绍下命令台下openssl工具的简单使用:生成一个密钥:<pre lang="c" esc ...

  8. linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改

    原文地址:http://www.cnblogs.com/firtree/p/4028354.html linux下利用openssl来实现证书的颁发(详细步骤) 1.首先需要安装openssl,一个开 ...

  9. NetCore 生成RSA公私钥对,公钥加密私钥解密,私钥加密公钥解密

    using Newtonsoft.Json; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Encodings; using ...

随机推荐

  1. MVC-Cache-2.应用程序缓存(Cache:1.输出缓存[2].应用程序缓存)

    2.应用数据缓存-Cache 1.引入CacheHelper.cs CacheHelper.cs文件源码在下面; 2.介绍用法: //键 string ips = "键"; //值 ...

  2. Write-Off

    What is a Write-Off? Write-offis an accounting term referring to an action whereby the book value of ...

  3. MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合

    笔记要点出错分析与总结工程组织 1.定义接口 public interface EmployeeMapper { //多条记录封装到一个map中: Map<Integer,Employee> ...

  4. mybatis自测错题总结

    试题分析:MyBatis有两种事务管理器类型是JDBC和MANAGED   试题分析:mybatis-config.xml文件使用用来编写影响mybatis行为的设置(settings) 和属性(pe ...

  5. 44、[源码]-Spring容器创建-BeanFactory预准备

    44.[源码]-Spring容器创建-BeanFactory预准备 @Override public void refresh() throws BeansException, IllegalStat ...

  6. git查看commit提交记录详情

    相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...

  7. icpc 银川 H. Delivery Route SPFA优化

    Problem Description Pony is the boss of a courier company. The company needs to deliver packages to ...

  8. PostgreSQL 使用PG_Rman进行物理备份

    背景 在Oracle下我们可以使用rman进行物理备份,支持数据库的全量.增量.归档的备份模式而PostgreSQL作为开源数据库,近些时间来也一直向商业版数据库看齐,也推出了开源功工具pg_rman ...

  9. 删除唯一性约束unique

    删除唯一性约束 语法如下: alter table tableName drop index key_name;#删除唯一性约束,实际就是删除索引 drop index key_name on tab ...

  10. TensorFlow(三):非线性回归

    import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 非线性回归 # 使用numpy生成200个随机 ...