环境的配置可以参考http://www.cnblogs.com/yangyquin/p/5284530.html

网络上传输的数据很容易被抓包,如果不加密,那么网络数
据很容易被窃取,诸如用户名、密码这些明感的信息一旦丢
失,将会造成巨大的损失。
2、常用的加密方式
对称加密:加密方和解密方使用同一个秘钥
                  优点:加密解密过程简单,高效
                  缺点:有一 方泄密了,则整个加密就失去了意义
非对称加密:加密方和解密方使用不同的秘钥
                  优点:解密的秘钥无法由加密的秘钥,即使加密方暴露出  了秘钥也没事,这种加密方和解密方使用不同的秘  钥,大大提高了安全性
                  缺点:效率比较低下,过程比较繁琐
3、辅助概念
1、质数的概念
2、互为质数的概念
4、RSA加密秘钥的获取
step1:随机选取两个数p、q,满足互质
 
step2:n=p*q,//公开模数 Public Modules,其二进制位数即为                           秘钥长度
step3:g=f(p,q)=(p-1)*(q-1)
step4:在1和g之间任意一个随机整数e,满足1<e<g,//Public                          Exponent,公开指数
step5:由 e*d mod g = 1 关系式推导出来d,//Private Exponent,  私有指数
5、RSA加密秘钥的获取
RSA算法中的:
           公开秘钥=(e,n)
           私有秘钥=(d,n)
6、RSA加密解密算法
加密算法:设M为需要加密的明文数据
   则加密算法为:Encrypt_Message = M^e mod n
解密算法:设D为需要解密的密文数据
    则解密算法为:Decrypt_Message = D^d mod n
 
8、RSA算法缺点
1 效率非常低下
2 密文数据较之原数据,其长度大大增加,即数据冗余太严重
 #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的简单使用的更多相关文章

  1. 用openssl库RSA加密解密

    #include <stdio.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include < ...

  2. DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项

    DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...

  3. C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

    之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...

  4. 使用openssl库实现RSA、AES数据加密

         openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...

  5. [转]使用openssl库实现RSA、AES数据加密

    openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...

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

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

  7. C++调用openssl库生成RSA加密秘钥对

    直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...

  8. 利用OpenSSL库对Socket传输进行安全加密(RSA+AES)

    轉自:http://blog.chinaunix.net/uid-9543173-id-3921143.html 利用OpenSSL库对Socket传输进行安全加密(RSA+AES) 1. 利用RSA ...

  9. OpenSSL库验证PKCS7签名

    使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下: //signature ...

随机推荐

  1. 规模化落地云原生,阿里云即将重磅亮相 KubeCon China

    2019 年 6 月 24 日至 26 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCo ...

  2. 计算php程序运行时间

    <?php   //程序运行时间 $starttime = explode(' ',microtime()); echo microtime(); /*········以下是代码区······· ...

  3. 数据节点Datanodes

  4. Spark Steaming消费kafka数据条数变少问题

    对于基于Receiver 形式,我们可以通过配置 spark.streaming.receiver.maxRate 参数来限制每个 receiver 每秒最大可以接收的记录的数据:对于 Direct ...

  5. behavior planning——inputs to transition functions

    the answer is that we have to pass all  of the data into transition function except for the previous ...

  6. H3C 早期以太网技术介绍

  7. CSS3 Box-shadow 阴影效果用法

    一.基本用法: 二.内阴影用法: 三.阴影扩展长度值: box-shadow: 4rpx 4rpx 8rpx #aaa;

  8. 【原生JS】图片预加载之无序预加载

    图片预加载之无序预加载 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...

  9. Error: Cannot find module 'webpack/bin/config-yargs' 报错原因, webpack@4.X踩的坑~

    1 .使用webpack@4.32.2时, 当我通过package.json的script去执行webpack-dev-server时, 报以下错误:  Error: Cannot find modu ...

  10. 2003年NOIP普及组复赛题解

    题目涉及算法: 乒乓球:简单字符串模拟: 数字游戏:区间DP: 栈:卡特兰数 麦森数:高精度.快速幂.数学. 乒乓球 题目链接:https://www.luogu.org/problem/P1042 ...