OpenSsl库 Rsa的简单使用
环境的配置可以参考http://www.cnblogs.com/yangyquin/p/5284530.html
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <openssl/rsa.h>
#include <openssl/err.h>
#pragma comment(lib,"libeay32.lib")
#pragma comment(lib,"ssleay32.lib")
#define P "BCF3"
#define Q "116AB"
#define N "CDAE1851"
#define E "10001"
#define D "8C88F2A5"
int My_Rsa_public_encrypt(int flen, const unsigned char *from, unsigned char *to);
int My_Rsa_private_decrypt(int flen, const unsigned char *from, unsigned char *to); int main(void)
{
char* from ="";
unsigned char sz []={};
unsigned char decsz[]={};
My_Rsa_public_encrypt(lstrlen(from)+,(unsigned char*)from,sz);
My_Rsa_private_decrypt(lstrlen((char*)sz),sz,decsz);
system("pause");
return ;
}
int My_Rsa_public_encrypt(int flen, const unsigned char *from, unsigned char *to)
{
RSA* rSa = RSA_new();
if (!rSa)return -;
BIGNUM * bIgnUm = BN_new();
BIGNUM * bIgnUe = BN_new();
if (!bIgnUe || !bIgnUm)
{
RSA_free(rSa);
BN_free(bIgnUe);
BN_free(bIgnUm);
return -;
}
BN_init(bIgnUm);
BN_init(bIgnUe);
BN_hex2bn(&bIgnUm,N);
BN_hex2bn(&bIgnUe,E);
rSa->n = bIgnUm;
rSa->e = bIgnUe;
ERR_load_crypto_strings();
int nRet = RSA_public_encrypt(flen,from,to,rSa,RSA_NO_PADDING);
DWORD dwError = ERR_get_error();
if(nRet<)
{
printf("%s\r\n",ERR_lib_error_string(dwError));
printf("%s\r\n",ERR_func_error_string(dwError));
printf("%s\r\n",ERR_reason_error_string(dwError));
BN_free(bIgnUm);
BN_free(bIgnUe);
RSA_free(rSa);
return -;
}
printf("%X\r\n",*(PDWORD)to);
ERR_free_strings();
BN_free(bIgnUe);
BN_free(bIgnUm);
RSA_free(rSa);
return ; }
int My_Rsa_private_decrypt(int flen, const unsigned char *from, unsigned char *to)
{
RSA* rSa = RSA_new();
if (!rSa)return -;
BIGNUM * bIgnUm = BN_new();
BIGNUM *bIgnUp = BN_new();
BIGNUM * bIgnUe = BN_new();
if (!bIgnUe || !bIgnUm ||!bIgnUp)
{
RSA_free(rSa);
BN_free(bIgnUe);
BN_free(bIgnUm);
BN_free(bIgnUp);
return -;
}
BN_init(bIgnUm);
BN_init(bIgnUe);
BN_init(bIgnUp);
BN_hex2bn(&bIgnUp,E);
BN_hex2bn(&bIgnUm,N);
BN_hex2bn(&bIgnUe,D);
rSa->n = bIgnUm;
rSa->d = bIgnUe;
rSa->e = bIgnUp;
ERR_load_crypto_strings();
int nRet = RSA_private_decrypt(flen,from,to,rSa,RSA_NO_PADDING);
DWORD dwError = ERR_get_error();
if(nRet<)
{
printf("%s\r\n",ERR_lib_error_string(dwError));
printf("%s\r\n",ERR_func_error_string(dwError));
printf("%s\r\n",ERR_reason_error_string(dwError));
BN_free(bIgnUm);
BN_free(bIgnUe);
RSA_free(rSa);
return -;
}
printf("%s\r\n",to);
ERR_free_strings();
BN_free(bIgnUe);
BN_free(bIgnUm);
BN_free(bIgnUp);
RSA_free(rSa);
return ;
}
OpenSsl库 Rsa的简单使用的更多相关文章
- 用openssl库RSA加密解密
#include <stdio.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include < ...
- DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项
DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...
- C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...
- 使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...
- [转]使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...
- RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例
前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密 私加 ===================== ...
- C++调用openssl库生成RSA加密秘钥对
直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...
- 利用OpenSSL库对Socket传输进行安全加密(RSA+AES)
轉自:http://blog.chinaunix.net/uid-9543173-id-3921143.html 利用OpenSSL库对Socket传输进行安全加密(RSA+AES) 1. 利用RSA ...
- OpenSSL库验证PKCS7签名
使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下: //signature ...
随机推荐
- Java练习 SDUT-1171_保留整数
C语言实验--保留整数 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入一个字符串str1,把其中的连续非数字的字符 ...
- SDUT-2118_数据结构实验之链表三:链表的逆置
数据结构实验之链表三:链表的逆置 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入多个整数,以-1作为结束标志,顺序 ...
- Mysql 数据库优化(一)
一 避免网页访问错误 1 数据库连接timeout产生页面5xx错误 2 慢查询造成页面无法加载 3 阻塞造成数据无法提交 二 增加数据库的稳定性 三 优化用户体验 1 流畅的页面访问速度 2 良好 ...
- part11.2-LED驱动设计
- VSCode配置启动Vue项目
下载安装并配置VSCode 随便百度上搜个最新的VSCode安装好后,点击Ctrl + Shit + X打开插件扩展窗口进行插件扩展,这里要安装两个插件. 1.vetur插件的安装 该插件是vue文件 ...
- 2019-8-31-PowerShell-通过-WMI-获取系统服务
title author date CreateTime categories PowerShell 通过 WMI 获取系统服务 lindexi 2019-08-31 16:55:58 +0800 2 ...
- jquery tab点击切换的问题
问题: 页面结构见下 <div id="wrap"> <li> <a href="#" class="active&qu ...
- pytorch lstm crf 代码理解 重点
好久没有写博客了,这一次就将最近看的pytorch 教程中的lstm+crf的一些心得与困惑记录下来. 原文 PyTorch Tutorials 参考了很多其他大神的博客,https://blog.c ...
- 深入java面向对象四:Java 内部类种类及使用解析(转)
内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...
- POJ 2251宽搜、
因为这个题做了两次犯了两次不同的错误. 第一次用的dfs死活都超时 第二次把定义队列定义在了全局变量的位置,导致连WA了几次.最后找到原因的我真的想一巴掌拍死自己 #include<cstdio ...