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 ...
随机推荐
- Python基础:08列表解析与生成器表达式
一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法: [exp ...
- 《C语言深度解剖》学习笔记之预处理
第3章 预处理 1.下面两行代码都是错的.因为注释先于预处理指令被处理,当这两行被展开成“//……”和“/*……*/”时,注释已处理完毕,所以出现错误 #define BSC // #define B ...
- php第三方登录(微博登录,仿照慕课网)
https://www.cnblogs.com/haoyu521/p/5606931.html 1:开发之前,请大家先自行熟悉一下OAuth协议原理. 2:我们开发需要具备一个外网可访问的线上域名,如 ...
- hdu 1789 Doing Homework again (Greedy)
Problem - 1789 继续贪心.经典贪心算法,如果数据比较大就要用线段树来维护了. 思路很简单,只要按照代价由大到小排序,然后靠后插入即可.RE了一次,是没想到deadline可以很大.如果d ...
- 【t001】不高兴的津津
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外 ...
- Spring Boot 动态数据源(多数据源自动切换)
本文实现案例场景: 某系统除了需要从自己的主要数据库上读取和管理数据外,还有一部分业务涉及到其他多个数据库,要求可以在任何方法上可以灵活指定具体要操作的数据库. 为了在开发中以最简单的方法使用,本文基 ...
- Gora是一个类似Hibernate的ORM框架
Gora是一个类似Hibernate的ORM框架,但是不只是支持关系数据库,更重要支持NoSQL之类大数据的存储. 支持NoSQL之类大数据的存储 Apache Gora是一个开源的ORM(Objec ...
- P1075 语句解析
题目描述 一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 3 个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数]; ...
- linux版本依赖
记住, 你的模块代码一定要为每个它要连接的内核版本重新编译 -- 至少, 在缺乏 modversions 时, 这里不涉及因为它们更多的是给内核发布制作者, 而不是开发者. 模块 是紧密结合到一个特殊 ...
- springboot2.x整合JPA
项目结构 pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...